Hello,
I have the same problem on a Dual Xeon Workstation running SUSE 10.0.
What a coincident I debugged into the problem today. I came to the same
result. Handling the NOCHILD problem is a good idea because you get a
proper error message.
But to solve the problem I think it would be a good thing to disable
the SIGCHLD handler using apr_signal while the hook runs. I just made
the following changes to my version 1.3.2. Until now it seams to work
...
Any comments
Bernhard.
--- hooks.c.org 2006-09-13 14:46:33.000000000 +0200
+++ hooks.c 2006-09-13 14:47:21.000000000 +0200
@@ -21,6 +21,7 @@
#include <apr_pools.h>
#include <apr_file_io.h>
+#include <apr_signal.h>
#include "svn_error.h"
#include "svn_path.h"
@@ -58,7 +59,8 @@ run_hook_cmd (const char *name,
int exitcode;
apr_exit_why_e exitwhy;
apr_proc_t cmd_proc;
-
+ apr_sigfunc_t * oldSigFunc;
+
/* Create a pipe to access stderr of the child. */
apr_err = apr_file_pipe_create(&read_errhandle, &write_errhandle,
pool);
if (apr_err)
@@ -92,6 +94,8 @@ run_hook_cmd (const char *name,
return svn_error_wrap_apr
(apr_err, _("Can't create null stdout for hook '%s'"), cmd);
+ oldSigFunc = apr_signal(SIGCHLD, SIG_DFL);
+
err = svn_io_start_cmd (&cmd_proc, ".", cmd, args, FALSE,
stdin_handle, null_handle, write_errhandle,
pool);
@@ -101,8 +105,12 @@ run_hook_cmd (const char *name,
pipe so we don't hang on the read end later, if we need to read
it. */
apr_err = apr_file_close (write_errhandle);
if (!err && apr_err)
+ {
+ apr_signal(SIGCHLD, oldSigFunc);
+
return svn_error_wrap_apr
(apr_err, _("Error closing write end of stderr pipe"));
+ }
if (err)
{
@@ -117,6 +125,7 @@ run_hook_cmd (const char *name,
err2 = svn_stringbuf_from_aprfile (&error, read_errhandle,
pool);
err = svn_io_wait_for_cmd(&cmd_proc, cmd, &exitcode, &exitwhy,
pool);
+
if (! err)
{
if (! APR_PROC_CHECK_EXIT (exitwhy) || exitcode != 0)
@@ -145,6 +154,9 @@ run_hook_cmd (const char *name,
}
}
+ apr_signal(SIGCHLD, oldSigFunc);
+
+
/* Hooks are fallible, and so hook failure is "expected" to occur at
times. When such a failure happens we still want to close the
pipe
and null file */
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Thu Sep 14 00:21:28 2006