[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r10679 - in gnunet/src: arm include util
From: |
gnunet |
Subject: |
[GNUnet-SVN] r10679 - in gnunet/src: arm include util |
Date: |
Mon, 22 Mar 2010 22:50:38 +0100 |
Author: durner
Date: 2010-03-22 22:50:38 +0100 (Mon, 22 Mar 2010)
New Revision: 10679
Modified:
gnunet/src/arm/gnunet-service-arm.c
gnunet/src/include/platform.h
gnunet/src/util/os_priority.c
gnunet/src/util/signal.c
Log:
Modified: gnunet/src/arm/gnunet-service-arm.c
===================================================================
--- gnunet/src/arm/gnunet-service-arm.c 2010-03-22 20:24:49 UTC (rev 10678)
+++ gnunet/src/arm/gnunet-service-arm.c 2010-03-22 21:50:38 UTC (rev 10679)
@@ -986,7 +986,7 @@
sched = s;
server = serv;
GNUNET_assert (serv != NULL);
- shc_chld = GNUNET_SIGNAL_handler_install (SIGCHLD, &sighandler_child_death);
+ shc_chld = GNUNET_SIGNAL_handler_install (GNUNET_SIGCHLD,
&sighandler_child_death);
GNUNET_assert (sigpipe == NULL);
sigpipe = GNUNET_DISK_pipe (GNUNET_NO);
GNUNET_assert (sigpipe != NULL);
Modified: gnunet/src/include/platform.h
===================================================================
--- gnunet/src/include/platform.h 2010-03-22 20:24:49 UTC (rev 10678)
+++ gnunet/src/include/platform.h 2010-03-22 21:50:38 UTC (rev 10679)
@@ -40,8 +40,10 @@
#ifdef WINDOWS
#define BREAKPOINT asm("int $3;");
+#define GNUNET_SIGCHLD 17
#else
#define BREAKPOINT
+#define GNUNET_SIGCHLD SIGCHLD
#endif
#ifdef HAVE_SYS_TYPES_H
Modified: gnunet/src/util/os_priority.c
===================================================================
--- gnunet/src/util/os_priority.c 2010-03-22 20:24:49 UTC (rev 10678)
+++ gnunet/src/util/os_priority.c 2010-03-22 21:50:38 UTC (rev 10679)
@@ -29,7 +29,28 @@
#include "gnunet_os_lib.h"
#include "disk.h"
+#if WINDOWS
+#include "gnunet_signal_lib.h"
+
+extern GNUNET_SIGNAL_Handler w32_sigchld_handler;
+
/**
+ * @brief Waits for a process to terminate and invokes the SIGCHLD handler
+ * @param h handle to the process
+ */
+static DWORD WINAPI
+ChildWaitThread (HANDLE h)
+{
+ WaitForSingleObject (h, INFINITE);
+
+ if (w32_sigchld_handler)
+ w32_sigchld_handler ();
+
+ CloseHandle (h);
+}
+#endif
+
+/**
* Set process priority
*
* @param proc id of the process
@@ -274,9 +295,11 @@
GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "CreateProcess", fn);
return -1;
}
+
+ CreateThread (NULL, 64000, ChildWaitThread, proc.hProcess, 0, NULL);
+
if (fn != filename)
GNUNET_free (fn);
- CloseHandle (proc.hProcess);
CloseHandle (proc.hThread);
GNUNET_free (cmd);
@@ -365,9 +388,10 @@
GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "fork");
return -1;
}
- CloseHandle (proc.hProcess);
+
+ CreateThread (NULL, 64000, ChildWaitThread, proc.hProcess, 0, NULL);
+
CloseHandle (proc.hThread);
-
GNUNET_free (cmd);
return proc.dwProcessId;
Modified: gnunet/src/util/signal.c
===================================================================
--- gnunet/src/util/signal.c 2010-03-22 20:24:49 UTC (rev 10678)
+++ gnunet/src/util/signal.c 2010-03-22 21:50:38 UTC (rev 10679)
@@ -39,8 +39,12 @@
#endif
};
+#ifdef WINDOWS
+GNUNET_SIGNAL_Handler w32_sigchld_handler = NULL;
+#endif
+
struct GNUNET_SIGNAL_Context *
-GNUNET_SIGNAL_handler_install (int signal, GNUNET_SIGNAL_Handler handler)
+GNUNET_SIGNAL_handler_install (int signum, GNUNET_SIGNAL_Handler handler)
{
struct GNUNET_SIGNAL_Context *ret;
#ifndef MINGW
@@ -48,7 +52,7 @@
#endif
ret = GNUNET_malloc (sizeof (struct GNUNET_SIGNAL_Context));
- ret->sig = signal;
+ ret->sig = signum;
ret->method = handler;
#ifndef MINGW
sig.sa_handler = (void *) handler;
@@ -58,7 +62,12 @@
#else
sig.sa_flags = SA_RESTART;
#endif
- sigaction (signal, &sig, &ret->oldsig);
+ sigaction (signum, &sig, &ret->oldsig);
+#else
+ if (signum == GNUNET_SIGCHLD)
+ w32_sigchld_handler = handler;
+ else
+ signal (signum, handler);
#endif
return ret;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r10679 - in gnunet/src: arm include util,
gnunet <=