[PD-dev] Shell and long-term instability
Mathieu Bouchard
matju at artengine.ca
Tue Nov 27 06:45:42 CET 2007
On Mon, 26 Nov 2007, Hans-Christoph Steiner wrote:
> Yeah, [shell] definitely acts strangely sometimes.
[shell] uses system() instead of the commented-out execvp(). This requires
the child to exit by itself. This is done using a call to exit(). exit()
calls all exit handlers registered by atexit(), which includes some that
are registered by gcc/glibc that call fclose() on all remaining
filehandles. fclose() calls fflush() prior to destructing the filehandle.
fflush() may contain duplicate data that is sent a second time completely
out of sync with what the main process is sending through the same socket.
It is the same socket because fork() copies all low-level filehandles (int
fd) from one process to the other, with the exact same destination. Thus
when the sys_gui() buffer is not empty during a fork(), an exit() will
garble the tk command socket's data, which may happen in a way that an
open brace is sticking in the air or whatever can freeze pd.tk, i don't
know what it is in particular.
I believe that _exit() does not flush the filehandles. The manpage says it
closes files, but they must mean only "int fd", whose buffers are shared
between all owning processes, unlike "FILE *" buffers.
_ _ __ ___ _____ ________ _____________ _____________________ ...
| Mathieu Bouchard - tél:+1.514.383.3801, Montréal QC Canada
More information about the Pd-dev
mailing list