- 26 Mar, 2018 13 commits
-
-
dw authored
Add testimonial from Clojars
-
David Wilson authored
-
David Wilson authored
-
David Wilson authored
-
David Wilson authored
-16% reduction in fork cost.
-
David Wilson authored
-
David Wilson authored
-
David Wilson authored
This lets context.shutdown(wait=True) succeed in the master or any parent.
-
David Wilson authored
-
David Wilson authored
-
David Wilson authored
-
David Wilson authored
-
David Wilson authored
-
- 25 Mar, 2018 14 commits
-
-
Daniel Compton authored
-
David Wilson authored
-
David Wilson authored
-
David Wilson authored
-
David Wilson authored
Central mechanism for deleting all non-Latch file descriptors belonging to the parent process during fork().
-
David Wilson authored
-
David Wilson authored
Many dragons present!
-
David Wilson authored
-
David Wilson authored
Let us override a class attribute to specify prefix from fork.py, rather than reimplement the same logic.
-
David Wilson authored
TLS destructors are not called after fork, therefore we must explicitly track a global list of free file descriptors, and arrange for that list to explicitly be destroyed from fork.py.
-
David Wilson authored
More hacky layering violations.. force Importer's _context attribute to our new parent.
-
David Wilson authored
-
David Wilson authored
This allows context_by_id() in the master to succeed in returning a Context with a .name matching the context's name, needed for correct logging. Previously this would have logged the empty string, because the master had no mechanism to know the name of a context created by a child.
-
David Wilson authored
-
- 24 Mar, 2018 13 commits
-
-
David Wilson authored
-
David Wilson authored
-
David Wilson authored
-
David Wilson authored
Mostly just to avoid embarrassing function size, but it may come in useful for testing later.
-
David Wilson authored
-
David Wilson authored
-
David Wilson authored
-
David Wilson authored
This is a partial fix to a general problem: deciding which bits of state to keep from the parent, and which to clear out. When forking from a heavily threaded process, there will be 2x$n_threads fds just sitting around doing nothing, due to Latch use in the parent. We can't just close all nonstandard fds post-fork, since user code may be expecting some FDs to be preserved.
-
David Wilson authored
-
David Wilson authored
This permits graceful shutdown of individual contexts, without tearing down everything. Update mitogen.parent.Stream to also wait for the child to exit, to prevent the buildup of zombie processes. This introduces a blocking wait for process exit on the Broker thread, let's see if we can get away with it. Chances are reasonable that it'll cause needless hangs on heavily loaded machines.
-
David Wilson authored
The Context and Router APIs for constructing children and making function calls should be available in every parent context, as user code wants to have access to the same API.
-
David Wilson authored
-
David Wilson authored
nested_test was failing due to the recent change to centralize O_CLOEXEC, since stdout and stderr were being marked as non-inheritable. That meant child processes would start with no stdout/stderr, triggering a race between Waker opening its pipes, and IoLogger dup2'ing its pipes over the stdio handles. Since the stdio handles were closed, Waker would receive one of them as one end of its pipe, and consequently have it overwritten by IoLogger. When IoLogger dups over the top of fd 2, it becomes possible for Waker.on_read() to be called due to pipe's other end to be closed, causing an OSError exception with errno EAGAIN to appear.
-