projects
/
platform
/
upstream
/
glib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[kdbus] Add SipHash algorithm
[platform/upstream/glib.git]
/
tests
/
child-test.c
diff --git
a/tests/child-test.c
b/tests/child-test.c
index
e7d7daf
..
f7edaee
100644
(file)
--- 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
* 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 <http://www.gnu.org/licenses/>.
*/
/*
*/
/*
@@
-24,16
+22,15
@@
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
-#include "config.h"
-
#include <sys/types.h>
#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
#include <stdlib.h>
#include <glib.h>
#include <stdlib.h>
#include <glib.h>
+#ifdef G_OS_UNIX
+#include <unistd.h>
+#endif
+
#ifdef G_OS_WIN32
#include <windows.h>
#endif
#ifdef G_OS_WIN32
#include <windows.h>
#endif
@@
-51,7
+48,7
@@
gint alive;
char *argv0;
#endif
char *argv0;
#endif
-GPid
+
static
GPid
get_a_child (gint ttl)
{
GPid pid;
get_a_child (gint ttl)
{
GPid pid;
@@
-89,12
+86,14
@@
get_a_child (gint ttl)
#endif /* G_OS_WIN32 */
}
#endif /* G_OS_WIN32 */
}
-gboolean
+
static
gboolean
child_watch_callback (GPid pid, gint status, gpointer data)
{
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);
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);
g_spawn_close_pid (pid);
@@
-104,6
+103,17
@@
child_watch_callback (GPid pid, gint status, gpointer data)
return TRUE;
}
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)
{
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);
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);
g_print ("whee! created pid: " GPID_FORMAT " (ttl %d)\n", pid, ttl);
+#endif
g_main_loop_run (new_main_loop);
return NULL;
}
g_main_loop_run (new_main_loop);
return NULL;
}
+#endif
int
main (int argc, char *argv[])
{
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')
#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
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
main_loop = g_main_loop_new (NULL, FALSE);
#ifdef G_OS_WIN32
system ("ipconfig /all");
#else
- system ("
/bin/
true");
+ system ("true");
#endif
alive = 2;
#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);
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);
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;
}
return 0;
}