Re: Using fork() in a GTK C/Vala application



Thanks for your answer. Unfortunately, I'm running out of options:
currently I'm using threads, but there is a nasty bug that makes my
program crash sometimes. It is very subtle, because it hapens usually
after being running for two-three days. It is a double free. I tried
with Valgrind, but when I use it, the error doesn't trigger, which makes
me suspect it is a race condition between both threads (valgrind ensures
that only one thread runs each time). I checked all the code, and
isolated everything as much as I could, and adding as many locks as I
could imagine, trying to remove that bug, but its imposible, so I
decided to separate the code in two independent processes to be able to
use valgrind and finally find what is happening. But as you say, it
seems I'll have to do something else...

On 01/09/15 15:12, Chris Vine wrote:
On Tue, 1 Sep 2015 13:54:34 +0200
rastersoft <raster rastersoft com> wrote:
Hi all:

I'm working on a project which, for several reasons, will use the
Posix fork() call. The question is: if I have an active GTK main loop
in the program before calling fork(), is there something I have to do
after calling it in the child process? I know that I must NOT use Gtk
calls in the child, but should I quit the main loop in the child?
Should I quit before the Gtk main loop, create the child, and call it
again? What can I do to don't loose registered callbacks and so on?
Because of gio, which uses background threads for some of its stuff
(in particular for its async i/o operations) all GTK+ programs are in
effect multi-threaded nowadays.  This makes calling fork() problematic,
because as you probably know POSIX only permits async-signal-safe
functions to be called after a fork() and before an exec() in a
multi-threaded program.  If you want to do anything other than a fork()
and an exec(), then start a thread not a new process.  This leaves your
question redundant.

For asynchronous tasks you might want to look at GTask (available from
glib-2.36).  For an encapsulation of the fork()/exec() approach, see
also GSubProcess, available from glib-2.40.

Chris
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list


-- 
Nos leemos
                         RASTER    (Linux user #228804)
raster rastersoft com              http://www.rastersoft.com



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]