From: Hans Breuer Date: Sat, 28 Feb 2004 13:04:24 +0000 (+0000) Subject: applied patch from J. Ali Harlow to fix g_child_watch X-Git-Url: http://git.openbox.org/?a=commitdiff_plain;h=3922b356a9a32fed2d586c6fced7939333f1c0a9;p=dana%2Fcg-glib.git applied patch from J. Ali Harlow to fix g_child_watch 2003-02-28 Hans Breuer * tests/child-test.c glib/gmain.c : applied patch from J. Ali Harlow to fix g_child_watch implementation on win32, bug #50296 --- diff --git a/tests/child-test.c b/tests/child-test.c index 731b7166..3d36774f 100644 --- a/tests/child-test.c +++ b/tests/child-test.c @@ -27,19 +27,50 @@ #include "config.h" #include +#ifdef HAVE_UNISTD_H #include +#endif #include #include +#ifdef G_OS_WIN32 +#include +#endif + GMainLoop *main_loop; gint alive; -gint +#ifdef G_OS_WIN32 +char *argv0; +#endif + +GPid get_a_child (gint ttl) { GPid pid; +#ifdef G_OS_WIN32 + STARTUPINFO si; + PROCESS_INFORMATION pi; + gchar *cmdline; + + memset (&si, 0, sizeof (si)); + si.cb = sizeof (&si); + memset (&pi, 0, sizeof (pi)); + + cmdline = g_strdup_printf( "child-test -c%d", ttl); + + if (!CreateProcess (argv0, cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) + exit (1); + + g_free(cmdline); + + CloseHandle (pi.hThread); + pid = pi.hProcess; + + return pid; +#else pid = fork (); if (pid < 0) exit (1); @@ -49,12 +80,19 @@ get_a_child (gint ttl) sleep (ttl); _exit (0); +#endif /* G_OS_WIN32 */ } gboolean child_watch_callback (GPid pid, gint status, gpointer data) { +#ifndef G_OS_WIN32 g_print ("child %d exited, status %d\n", pid, status); +#else + g_print ("child %p exited, status %d\n", pid, status); + + CloseHandle(pid); +#endif if (--alive == 0) g_main_loop_quit (main_loop); @@ -78,7 +116,12 @@ test_thread (gpointer data) g_source_attach (source, g_main_loop_get_context (new_main_loop)); g_source_unref (source); +#ifdef G_OS_WIN32 + g_print ("whee! created pid: %p\n", pid); +#else g_print ("whee! created pid: %d\n", pid); +#endif + g_main_loop_run (new_main_loop); } @@ -86,6 +129,15 @@ test_thread (gpointer data) int main (int argc, char *argv[]) { +#ifdef G_OS_WIN32 + argv0 = argv[0]; + if (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'c') + { + int ttl = atoi (argv[1] + 2); + Sleep (ttl * 1000); + exit (STILL_ACTIVE); + } +#endif /* Only run the test, if threads are enabled and a default thread implementation is available */ #if defined(G_THREADS_ENABLED) && ! defined(G_THREADS_IMPL_NONE)