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;
}