X7ROOT File Manager
Current Path:
/opt/hc_python/lib/python3.12/site-packages/greenlet
opt
/
hc_python
/
lib
/
python3.12
/
site-packages
/
greenlet
/
??
..
??
CObjects.cpp
(3.43 KB)
??
PyGreenlet.cpp
(23.63 KB)
??
PyGreenlet.hpp
(1.43 KB)
??
PyGreenletUnswitchable.cpp
(4.27 KB)
??
PyModule.cpp
(8.39 KB)
??
TBrokenGreenlet.cpp
(1021 B)
??
TExceptionState.cpp
(1.33 KB)
??
TGreenlet.cpp
(25.13 KB)
??
TGreenlet.hpp
(27.85 KB)
??
TGreenletGlobals.cpp
(3.19 KB)
??
TMainGreenlet.cpp
(3.2 KB)
??
TPythonState.cpp
(15.6 KB)
??
TStackState.cpp
(7.21 KB)
??
TThreadState.hpp
(18.68 KB)
??
TThreadStateCreator.hpp
(2.55 KB)
??
TThreadStateDestroy.cpp
(7.98 KB)
??
TUserGreenlet.cpp
(23 KB)
??
__init__.py
(1.68 KB)
??
__pycache__
??
_greenlet.cpython-312-x86_64-linux-gnu.so
(1.38 MB)
??
greenlet.cpp
(10.74 KB)
??
greenlet.h
(4.64 KB)
??
greenlet_allocator.hpp
(2.55 KB)
??
greenlet_compiler_compat.hpp
(4.24 KB)
??
greenlet_cpython_compat.hpp
(4.05 KB)
??
greenlet_exceptions.hpp
(4.4 KB)
??
greenlet_internal.hpp
(2.65 KB)
??
greenlet_msvc_compat.hpp
(2.91 KB)
??
greenlet_refs.hpp
(33.63 KB)
??
greenlet_slp_switch.hpp
(3.12 KB)
??
greenlet_thread_support.hpp
(867 B)
??
platform
??
slp_platformselect.h
(3.87 KB)
??
tests
Editing: TMainGreenlet.cpp
/* -*- indent-tabs-mode: nil; tab-width: 4; -*- */ /** * Implementation of greenlet::MainGreenlet. * * Format with: * clang-format -i --style=file src/greenlet/greenlet.c * * * Fix missing braces with: * clang-tidy src/greenlet/greenlet.c -fix -checks="readability-braces-around-statements" */ #ifndef T_MAIN_GREENLET_CPP #define T_MAIN_GREENLET_CPP #include "TGreenlet.hpp" // Protected by the GIL. Incremented when we create a main greenlet, // in a new thread, decremented when it is destroyed. static Py_ssize_t G_TOTAL_MAIN_GREENLETS; namespace greenlet { greenlet::PythonAllocator<MainGreenlet> MainGreenlet::allocator; void* MainGreenlet::operator new(size_t UNUSED(count)) { return allocator.allocate(1); } void MainGreenlet::operator delete(void* ptr) { return allocator.deallocate(static_cast<MainGreenlet*>(ptr), 1); } MainGreenlet::MainGreenlet(PyGreenlet* p, ThreadState* state) : Greenlet(p, StackState::make_main()), _self(p), _thread_state(state) { G_TOTAL_MAIN_GREENLETS++; } MainGreenlet::~MainGreenlet() { G_TOTAL_MAIN_GREENLETS--; this->tp_clear(); } ThreadState* MainGreenlet::thread_state() const noexcept { return this->_thread_state; } void MainGreenlet::thread_state(ThreadState* t) noexcept { assert(!t); this->_thread_state = t; } const BorrowedMainGreenlet MainGreenlet::main_greenlet() const { return this->_self; } BorrowedMainGreenlet MainGreenlet::find_main_greenlet_in_lineage() const { return BorrowedMainGreenlet(this->_self); } bool MainGreenlet::was_running_in_dead_thread() const noexcept { return !this->_thread_state; } OwnedObject MainGreenlet::g_switch() { try { this->check_switch_allowed(); } catch (const PyErrOccurred&) { this->release_args(); throw; } switchstack_result_t err = this->g_switchstack(); if (err.status < 0) { // XXX: This code path is untested, but it is shared // with the UserGreenlet path that is tested. return this->on_switchstack_or_initialstub_failure( this, err, true, // target was me false // was initial stub ); } return err.the_new_current_greenlet->g_switch_finish(err); } int MainGreenlet::tp_traverse(visitproc visit, void* arg) { if (this->_thread_state) { // we've already traversed main, (self), don't do it again. int result = this->_thread_state->tp_traverse(visit, arg, false); if (result) { return result; } } return Greenlet::tp_traverse(visit, arg); } const OwnedObject& MainGreenlet::run() const { throw AttributeError("Main greenlets do not have a run attribute."); } void MainGreenlet::run(const BorrowedObject UNUSED(nrun)) { throw AttributeError("Main greenlets do not have a run attribute."); } void MainGreenlet::parent(const BorrowedObject raw_new_parent) { if (!raw_new_parent) { throw AttributeError("can't delete attribute"); } throw AttributeError("cannot set the parent of a main greenlet"); } const OwnedGreenlet MainGreenlet::parent() const { return OwnedGreenlet(); // null becomes None } }; // namespace greenlet #endif
Upload File
Create Folder