SILENT KILLERPanel

Current Path: > > opt > > alt > python313 > include > > > python3.13 > internal


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //opt//alt/python313/include///python3.13/internal

NameTypeSizeLast ModifiedActions
mimalloc Directory - -
pycore_abstract.h File 1915 bytes June 11 2025 15:36:57.
pycore_asdl.h File 3035 bytes June 11 2025 15:36:57.
pycore_ast.h File 31520 bytes June 11 2025 15:36:57.
pycore_ast_state.h File 6779 bytes June 11 2025 15:36:57.
pycore_atexit.h File 1433 bytes June 11 2025 15:36:57.
pycore_backoff.h File 3902 bytes June 11 2025 15:36:57.
pycore_bitutils.h File 6026 bytes June 11 2025 15:36:57.
pycore_blocks_output_buffer.h File 8772 bytes June 11 2025 15:36:57.
pycore_brc.h File 2102 bytes June 11 2025 15:36:57.
pycore_bytes_methods.h File 3933 bytes June 11 2025 15:36:57.
pycore_bytesobject.h File 5099 bytes June 11 2025 15:36:57.
pycore_call.h File 6135 bytes June 11 2025 15:36:57.
pycore_capsule.h File 397 bytes June 11 2025 15:36:57.
pycore_cell.h File 1057 bytes June 11 2025 15:36:57.
pycore_ceval.h File 11162 bytes June 11 2025 15:36:57.
pycore_ceval_state.h File 3921 bytes June 11 2025 15:36:57.
pycore_code.h File 19864 bytes June 11 2025 15:36:57.
pycore_codecs.h File 2465 bytes June 11 2025 15:36:57.
pycore_compile.h File 3750 bytes June 11 2025 15:36:57.
pycore_complexobject.h File 588 bytes June 11 2025 15:36:57.
pycore_condvar.h File 2704 bytes June 11 2025 15:36:57.
pycore_context.h File 1182 bytes June 11 2025 15:36:57.
pycore_critical_section.h File 7968 bytes June 11 2025 15:36:57.
pycore_crossinterp.h File 12128 bytes June 11 2025 15:36:57.
pycore_descrobject.h File 543 bytes June 11 2025 15:36:57.
pycore_dict.h File 12264 bytes June 11 2025 15:36:57.
pycore_dict_state.h File 732 bytes June 11 2025 15:36:57.
pycore_dtoa.h File 1727 bytes June 11 2025 15:36:57.
pycore_emscripten_signal.h File 685 bytes June 11 2025 15:36:57.
pycore_emscripten_trampoline.h File 3180 bytes June 11 2025 15:36:57.
pycore_exceptions.h File 900 bytes June 11 2025 15:36:57.
pycore_faulthandler.h File 2245 bytes June 11 2025 15:36:57.
pycore_fileutils.h File 9468 bytes June 11 2025 15:36:57.
pycore_fileutils_windows.h File 2713 bytes June 11 2025 15:36:57.
pycore_floatobject.h File 1495 bytes June 11 2025 15:36:57.
pycore_flowgraph.h File 1489 bytes June 11 2025 15:36:57.
pycore_format.h File 480 bytes June 11 2025 15:36:57.
pycore_frame.h File 10875 bytes June 11 2025 15:36:57.
pycore_freelist.h File 4810 bytes June 11 2025 15:36:57.
pycore_function.h File 1538 bytes June 11 2025 15:36:57.
pycore_gc.h File 12967 bytes June 11 2025 15:36:57.
pycore_genobject.h File 859 bytes June 11 2025 15:36:57.
pycore_getopt.h File 490 bytes June 11 2025 15:36:57.
pycore_gil.h File 2196 bytes June 11 2025 15:36:57.
pycore_global_objects.h File 3090 bytes June 11 2025 15:36:57.
pycore_global_objects_fini_generated.h File 117804 bytes June 11 2025 15:36:57.
pycore_global_strings.h File 26706 bytes June 11 2025 15:36:57.
pycore_hamt.h File 3742 bytes June 11 2025 15:36:57.
pycore_hashtable.h File 4361 bytes June 11 2025 15:36:57.
pycore_identifier.h File 515 bytes June 11 2025 15:36:57.
pycore_import.h File 7731 bytes June 11 2025 15:36:57.
pycore_importdl.h File 4055 bytes June 11 2025 15:36:57.
pycore_initconfig.h File 6375 bytes June 11 2025 15:36:57.
pycore_instruction_sequence.h File 2161 bytes June 11 2025 15:36:57.
pycore_instruments.h File 2331 bytes June 11 2025 15:36:57.
pycore_interp.h File 15063 bytes June 11 2025 15:36:57.
pycore_intrinsics.h File 1756 bytes June 11 2025 15:36:57.
pycore_jit.h File 527 bytes June 11 2025 15:36:57.
pycore_list.h File 1859 bytes June 11 2025 15:36:57.
pycore_llist.h File 2420 bytes June 11 2025 15:36:57.
pycore_lock.h File 8538 bytes June 11 2025 15:36:57.
pycore_long.h File 9966 bytes June 11 2025 15:36:57.
pycore_memoryobject.h File 427 bytes June 11 2025 15:36:57.
pycore_mimalloc.h File 1637 bytes June 11 2025 15:36:57.
pycore_modsupport.h File 3351 bytes June 11 2025 15:36:57.
pycore_moduleobject.h File 1572 bytes June 11 2025 15:36:57.
pycore_namespace.h File 435 bytes June 11 2025 15:36:57.
pycore_object.h File 27935 bytes June 11 2025 15:36:57.
pycore_object_alloc.h File 2176 bytes June 11 2025 15:36:57.
pycore_object_stack.h File 2384 bytes June 11 2025 15:36:57.
pycore_object_state.h File 942 bytes June 11 2025 15:36:57.
pycore_obmalloc.h File 27418 bytes June 11 2025 15:36:57.
pycore_obmalloc_init.h File 1935 bytes June 11 2025 15:36:57.
pycore_opcode_metadata.h File 84722 bytes June 11 2025 15:36:57.
pycore_opcode_utils.h File 2122 bytes June 11 2025 15:36:57.
pycore_optimizer.h File 8303 bytes June 11 2025 15:36:57.
pycore_parking_lot.h File 3351 bytes June 11 2025 15:36:57.
pycore_parser.h File 2089 bytes June 11 2025 15:36:57.
pycore_pathconfig.h File 658 bytes June 11 2025 15:36:57.
pycore_pyarena.h File 2862 bytes June 11 2025 15:36:57.
pycore_pyatomic_ft_wrappers.h File 8056 bytes June 11 2025 15:36:57.
pycore_pybuffer.h File 510 bytes June 11 2025 15:36:57.
pycore_pyerrors.h File 4960 bytes June 11 2025 15:36:57.
pycore_pyhash.h File 2813 bytes June 11 2025 15:36:57.
pycore_pylifecycle.h File 4465 bytes June 11 2025 15:36:57.
pycore_pymath.h File 8600 bytes June 11 2025 15:36:57.
pycore_pymem.h File 4472 bytes June 11 2025 15:36:57.
pycore_pymem_init.h File 3520 bytes June 11 2025 15:36:57.
pycore_pystate.h File 9964 bytes June 11 2025 15:36:57.
pycore_pystats.h File 420 bytes June 11 2025 15:36:57.
pycore_pythonrun.h File 758 bytes June 11 2025 15:36:57.
pycore_pythread.h File 5431 bytes June 11 2025 15:36:57.
pycore_qsbr.h File 4927 bytes June 11 2025 15:36:57.
pycore_range.h File 346 bytes June 11 2025 15:36:57.
pycore_runtime.h File 13165 bytes June 11 2025 15:36:57.
pycore_runtime_init.h File 13045 bytes June 11 2025 15:36:57.
pycore_runtime_init_generated.h File 46820 bytes June 11 2025 15:36:57.
pycore_semaphore.h File 1731 bytes June 11 2025 15:36:57.
pycore_setobject.h File 951 bytes June 11 2025 15:36:57.
pycore_signal.h File 2931 bytes June 11 2025 15:36:57.
pycore_sliceobject.h File 369 bytes June 11 2025 15:36:57.
pycore_stackref.h File 5186 bytes June 11 2025 15:36:57.
pycore_strhex.h File 1013 bytes June 11 2025 15:36:57.
pycore_structseq.h File 963 bytes June 11 2025 15:36:57.
pycore_symtable.h File 8671 bytes June 11 2025 15:36:57.
pycore_sysmodule.h File 1177 bytes June 11 2025 15:36:57.
pycore_time.h File 11794 bytes June 11 2025 15:36:57.
pycore_token.h File 3001 bytes June 11 2025 15:36:57.
pycore_traceback.h File 3629 bytes June 11 2025 15:36:57.
pycore_tracemalloc.h File 4533 bytes June 11 2025 15:36:57.
pycore_tstate.h File 1354 bytes June 11 2025 15:36:57.
pycore_tuple.h File 820 bytes June 11 2025 15:36:57.
pycore_typeobject.h File 8877 bytes June 11 2025 15:36:57.
pycore_typevarobject.h File 924 bytes June 11 2025 15:36:57.
pycore_ucnhash.h File 958 bytes June 11 2025 15:36:57.
pycore_unicodeobject.h File 13270 bytes June 11 2025 15:36:57.
pycore_unicodeobject_generated.h File 132140 bytes June 11 2025 15:36:57.
pycore_unionobject.h File 742 bytes June 11 2025 15:36:57.
pycore_uop_ids.h File 10267 bytes June 11 2025 15:36:57.
pycore_uop_metadata.h File 39469 bytes June 11 2025 15:36:57.
pycore_warnings.h File 840 bytes June 11 2025 15:36:57.
pycore_weakref.h File 3331 bytes June 11 2025 15:36:57.

Reading File: //opt//alt/python313/include///python3.13/internal/pycore_critical_section.h

#ifndef Py_INTERNAL_CRITICAL_SECTION_H
#define Py_INTERNAL_CRITICAL_SECTION_H

#ifndef Py_BUILD_CORE
#  error "this header requires Py_BUILD_CORE define"
#endif

#include "pycore_lock.h"        // PyMutex
#include "pycore_pystate.h"     // _PyThreadState_GET()
#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

// Tagged pointers to critical sections use the two least significant bits to
// mark if the pointed-to critical section is inactive and whether it is a
// PyCriticalSection2 object.
#define _Py_CRITICAL_SECTION_INACTIVE       0x1
#define _Py_CRITICAL_SECTION_TWO_MUTEXES    0x2
#define _Py_CRITICAL_SECTION_MASK           0x3

#ifdef Py_GIL_DISABLED
# define Py_BEGIN_CRITICAL_SECTION_MUT(mutex)                           \
    {                                                                   \
        PyCriticalSection _py_cs;                                       \
        _PyCriticalSection_BeginMutex(&_py_cs, mutex)

# define Py_BEGIN_CRITICAL_SECTION2_MUT(m1, m2)                         \
    {                                                                   \
        PyCriticalSection2 _py_cs2;                                     \
        _PyCriticalSection2_BeginMutex(&_py_cs2, m1, m2)

// Specialized version of critical section locking to safely use
// PySequence_Fast APIs without the GIL. For performance, the argument *to*
// PySequence_Fast() is provided to the macro, not the *result* of
// PySequence_Fast(), which would require an extra test to determine if the
// lock must be acquired.
# define Py_BEGIN_CRITICAL_SECTION_SEQUENCE_FAST(original)              \
    {                                                                   \
        PyObject *_orig_seq = _PyObject_CAST(original);                 \
        const bool _should_lock_cs = PyList_CheckExact(_orig_seq);      \
        PyCriticalSection _cs;                                          \
        if (_should_lock_cs) {                                          \
            _PyCriticalSection_Begin(&_cs, _orig_seq);                  \
        }

# define Py_END_CRITICAL_SECTION_SEQUENCE_FAST()                        \
        if (_should_lock_cs) {                                          \
            PyCriticalSection_End(&_cs);                                \
        }                                                               \
    }

// Asserts that the mutex is locked.  The mutex must be held by the
// top-most critical section otherwise there's the possibility
// that the mutex would be swalled out in some code paths.
#define _Py_CRITICAL_SECTION_ASSERT_MUTEX_LOCKED(mutex) \
    _PyCriticalSection_AssertHeld(mutex)

// Asserts that the mutex for the given object is locked. The mutex must
// be held by the top-most critical section otherwise there's the
// possibility that the mutex would be swalled out in some code paths.
#ifdef Py_DEBUG

# define _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(op)                           \
    if (Py_REFCNT(op) != 1) {                                                    \
        _Py_CRITICAL_SECTION_ASSERT_MUTEX_LOCKED(&_PyObject_CAST(op)->ob_mutex); \
    }

#else   /* Py_DEBUG */

# define _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(op)

#endif  /* Py_DEBUG */

#else  /* !Py_GIL_DISABLED */
// The critical section APIs are no-ops with the GIL.
# define Py_BEGIN_CRITICAL_SECTION_MUT(mut) {
# define Py_BEGIN_CRITICAL_SECTION2_MUT(m1, m2) {
# define Py_BEGIN_CRITICAL_SECTION_SEQUENCE_FAST(original) {
# define Py_END_CRITICAL_SECTION_SEQUENCE_FAST() }
# define _Py_CRITICAL_SECTION_ASSERT_MUTEX_LOCKED(mutex)
# define _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(op)
#endif  /* !Py_GIL_DISABLED */

// Resumes the top-most critical section.
PyAPI_FUNC(void)
_PyCriticalSection_Resume(PyThreadState *tstate);

// (private) slow path for locking the mutex
PyAPI_FUNC(void)
_PyCriticalSection_BeginSlow(PyCriticalSection *c, PyMutex *m);

PyAPI_FUNC(void)
_PyCriticalSection2_BeginSlow(PyCriticalSection2 *c, PyMutex *m1, PyMutex *m2,
                             int is_m1_locked);

PyAPI_FUNC(void)
_PyCriticalSection_SuspendAll(PyThreadState *tstate);

#ifdef Py_GIL_DISABLED

static inline int
_PyCriticalSection_IsActive(uintptr_t tag)
{
    return tag != 0 && (tag & _Py_CRITICAL_SECTION_INACTIVE) == 0;
}

static inline void
_PyCriticalSection_BeginMutex(PyCriticalSection *c, PyMutex *m)
{
    if (PyMutex_LockFast(&m->_bits)) {
        PyThreadState *tstate = _PyThreadState_GET();
        c->_cs_mutex = m;
        c->_cs_prev = tstate->critical_section;
        tstate->critical_section = (uintptr_t)c;
    }
    else {
        _PyCriticalSection_BeginSlow(c, m);
    }
}

static inline void
_PyCriticalSection_Begin(PyCriticalSection *c, PyObject *op)
{
    _PyCriticalSection_BeginMutex(c, &op->ob_mutex);
}
#define PyCriticalSection_Begin _PyCriticalSection_Begin

// Removes the top-most critical section from the thread's stack of critical
// sections. If the new top-most critical section is inactive, then it is
// resumed.
static inline void
_PyCriticalSection_Pop(PyCriticalSection *c)
{
    PyThreadState *tstate = _PyThreadState_GET();
    uintptr_t prev = c->_cs_prev;
    tstate->critical_section = prev;

    if ((prev & _Py_CRITICAL_SECTION_INACTIVE) != 0) {
        _PyCriticalSection_Resume(tstate);
    }
}

static inline void
_PyCriticalSection_End(PyCriticalSection *c)
{
    PyMutex_Unlock(c->_cs_mutex);
    _PyCriticalSection_Pop(c);
}
#define PyCriticalSection_End _PyCriticalSection_End

static inline void
_PyCriticalSection2_BeginMutex(PyCriticalSection2 *c, PyMutex *m1, PyMutex *m2)
{
    if (m1 == m2) {
        // If the two mutex arguments are the same, treat this as a critical
        // section with a single mutex.
        c->_cs_mutex2 = NULL;
        _PyCriticalSection_BeginMutex(&c->_cs_base, m1);
        return;
    }

    if ((uintptr_t)m2 < (uintptr_t)m1) {
        // Sort the mutexes so that the lower address is locked first.
        // The exact order does not matter, but we need to acquire the mutexes
        // in a consistent order to avoid lock ordering deadlocks.
        PyMutex *tmp = m1;
        m1 = m2;
        m2 = tmp;
    }

    if (PyMutex_LockFast(&m1->_bits)) {
        if (PyMutex_LockFast(&m2->_bits)) {
            PyThreadState *tstate = _PyThreadState_GET();
            c->_cs_base._cs_mutex = m1;
            c->_cs_mutex2 = m2;
            c->_cs_base._cs_prev = tstate->critical_section;

            uintptr_t p = (uintptr_t)c | _Py_CRITICAL_SECTION_TWO_MUTEXES;
            tstate->critical_section = p;
        }
        else {
            _PyCriticalSection2_BeginSlow(c, m1, m2, 1);
        }
    }
    else {
        _PyCriticalSection2_BeginSlow(c, m1, m2, 0);
    }
}

static inline void
_PyCriticalSection2_Begin(PyCriticalSection2 *c, PyObject *a, PyObject *b)
{
    _PyCriticalSection2_BeginMutex(c, &a->ob_mutex, &b->ob_mutex);
}
#define PyCriticalSection2_Begin _PyCriticalSection2_Begin

static inline void
_PyCriticalSection2_End(PyCriticalSection2 *c)
{
    if (c->_cs_mutex2) {
        PyMutex_Unlock(c->_cs_mutex2);
    }
    PyMutex_Unlock(c->_cs_base._cs_mutex);
    _PyCriticalSection_Pop(&c->_cs_base);
}
#define PyCriticalSection2_End _PyCriticalSection2_End

static inline void
_PyCriticalSection_AssertHeld(PyMutex *mutex)
{
#ifdef Py_DEBUG
    PyThreadState *tstate = _PyThreadState_GET();
    uintptr_t prev = tstate->critical_section;
    if (prev & _Py_CRITICAL_SECTION_TWO_MUTEXES) {
        PyCriticalSection2 *cs = (PyCriticalSection2 *)(prev & ~_Py_CRITICAL_SECTION_MASK);
        assert(cs != NULL && (cs->_cs_base._cs_mutex == mutex || cs->_cs_mutex2 == mutex));
    }
    else {
        PyCriticalSection *cs = (PyCriticalSection *)(tstate->critical_section & ~_Py_CRITICAL_SECTION_MASK);
        assert(cs != NULL && cs->_cs_mutex == mutex);
    }

#endif
}

#endif /* Py_GIL_DISABLED */

#ifdef __cplusplus
}
#endif
#endif /* !Py_INTERNAL_CRITICAL_SECTION_H */

SILENT KILLER Tool