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.