opt
/
hc_python
/
lib
/
python3.12
/
site-packages
/
greenlet
/
Go to Home Directory
+
Upload
Create File
root@0UT1S:~$
Execute
By Order of Mr.0UT1S
[DIR] ..
N/A
[DIR] __pycache__
N/A
[DIR] platform
N/A
[DIR] tests
N/A
CObjects.cpp
3.43 KB
Rename
Delete
PyGreenlet.cpp
22.89 KB
Rename
Delete
PyGreenlet.hpp
1.43 KB
Rename
Delete
PyGreenletUnswitchable.cpp
4.27 KB
Rename
Delete
PyModule.cpp
8.39 KB
Rename
Delete
TBrokenGreenlet.cpp
1021 bytes
Rename
Delete
TExceptionState.cpp
1.33 KB
Rename
Delete
TGreenlet.cpp
25.13 KB
Rename
Delete
TGreenlet.hpp
27.22 KB
Rename
Delete
TGreenletGlobals.cpp
3.19 KB
Rename
Delete
TMainGreenlet.cpp
3.20 KB
Rename
Delete
TPythonState.cpp
15.00 KB
Rename
Delete
TStackState.cpp
7.21 KB
Rename
Delete
TThreadState.hpp
18.68 KB
Rename
Delete
TThreadStateCreator.hpp
2.55 KB
Rename
Delete
TThreadStateDestroy.cpp
9.34 KB
Rename
Delete
TUserGreenlet.cpp
23.00 KB
Rename
Delete
__init__.py
1.68 KB
Rename
Delete
_greenlet.cpython-312-x86_64-linux-gnu.so
1.36 MB
Rename
Delete
greenlet.cpp
10.74 KB
Rename
Delete
greenlet.h
4.64 KB
Rename
Delete
greenlet_allocator.hpp
1.54 KB
Rename
Delete
greenlet_compiler_compat.hpp
4.24 KB
Rename
Delete
greenlet_cpython_add_pending.hpp
5.90 KB
Rename
Delete
greenlet_cpython_compat.hpp
3.87 KB
Rename
Delete
greenlet_exceptions.hpp
4.40 KB
Rename
Delete
greenlet_internal.hpp
2.65 KB
Rename
Delete
greenlet_refs.hpp
33.63 KB
Rename
Delete
greenlet_slp_switch.hpp
3.12 KB
Rename
Delete
greenlet_thread_support.hpp
867 bytes
Rename
Delete
slp_platformselect.h
3.75 KB
Rename
Delete
/* -*- 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
Save