========================== 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.