Caveats and Known Issues#
This document will describe known issues and sharp edges of greenlets.
Native Functions Should Be Re-entrant#
Use caution when switching greenlet stacks that include native (C) frames. Much like with threads, if the library function is not re-entrant, and more than one greenlet attempts to enter it, subtle problems can result.
Common constructs in C that may not be reentrant include:
static variables in functions;
global variables.
This was the source of an issue in gevent that led to corruption of libuv’s internal state. The fix was to avoid re-entering the vulnerable function.
Use Caution Mixing Greenlets and Signal Handlers#
In CPython, signal handler functions must return in order for the rest of the program to proceed. Switching greenlets in a signal handler to, for example, get back to the main greenlet, such that the signal handler function doesn’t really return to CPython, is likely to lead to a hang.
See issue #143 for an example.