X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=tests%2Fchild-test.c;h=f7edaee4b31cea391aef67cf47b7fcfff9a59ea8;hb=ea4f9ce8a060d53cbc299e4c384089f6cc926caa;hp=e7d7daf9a990cb9e6ab9694c3084536614a92b64;hpb=aa5764107d4b2def9e51e232df52b50514421b03;p=platform%2Fupstream%2Fglib.git diff --git a/tests/child-test.c b/tests/child-test.c index e7d7daf..f7edaee 100644 --- a/tests/child-test.c +++ b/tests/child-test.c @@ -12,9 +12,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library; if not, see . */ /* @@ -24,16 +22,15 @@ * GLib at ftp://ftp.gtk.org/pub/gtk/. */ -#include "config.h" - #include -#ifdef HAVE_UNISTD_H -#include -#endif #include #include +#ifdef G_OS_UNIX +#include +#endif + #ifdef G_OS_WIN32 #include #endif @@ -51,7 +48,7 @@ gint alive; char *argv0; #endif -GPid +static GPid get_a_child (gint ttl) { GPid pid; @@ -89,12 +86,14 @@ get_a_child (gint ttl) #endif /* G_OS_WIN32 */ } -gboolean +static gboolean child_watch_callback (GPid pid, gint status, gpointer data) { +#ifdef VERBOSE gint ttl = GPOINTER_TO_INT (data); g_print ("child " GPID_FORMAT " (ttl %d) exited, status %d\n", pid, ttl, status); +#endif g_spawn_close_pid (pid); @@ -104,6 +103,17 @@ child_watch_callback (GPid pid, gint status, gpointer data) return TRUE; } +static gboolean +quit_loop (gpointer data) +{ + GMainLoop *main_loop = data; + + g_main_loop_quit (main_loop); + + return TRUE; +} + +#ifdef TEST_THREAD static gpointer test_thread (gpointer data) { @@ -120,16 +130,22 @@ test_thread (gpointer data) g_source_attach (source, g_main_loop_get_context (new_main_loop)); g_source_unref (source); +#ifdef VERBOSE g_print ("whee! created pid: " GPID_FORMAT " (ttl %d)\n", pid, ttl); +#endif g_main_loop_run (new_main_loop); return NULL; } +#endif int main (int argc, char *argv[]) { +#ifndef TEST_THREAD + GPid pid; +#endif #ifdef G_OS_WIN32 argv0 = argv[0]; if (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'c') @@ -144,25 +160,39 @@ main (int argc, char *argv[]) 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) - g_thread_init (NULL); + main_loop = g_main_loop_new (NULL, FALSE); #ifdef G_OS_WIN32 system ("ipconfig /all"); #else - system ("/bin/true"); + system ("true"); #endif alive = 2; + g_timeout_add_seconds (30, quit_loop, main_loop); + +#ifdef TEST_THREAD g_thread_create (test_thread, GINT_TO_POINTER (10), FALSE, NULL); g_thread_create (test_thread, GINT_TO_POINTER (20), FALSE, NULL); +#else + pid = get_a_child (10); + g_child_watch_add (pid, (GChildWatchFunc) child_watch_callback, + GINT_TO_POINTER (10)); + pid = get_a_child (20); + g_child_watch_add (pid, (GChildWatchFunc) child_watch_callback, + GINT_TO_POINTER (20)); +#endif g_main_loop_run (main_loop); -#endif + g_main_loop_unref (main_loop); + + if (alive > 0) + { + g_warning ("%d children still alive\n", alive); + return 1; + } + return 0; }