Forum OpenACS Development: Re: Possible 10g Solaris Problem

Posted by Simos Gabrielidis on

I was getting the same error message with AOLServer4.0.10 + nsoracle 2.7 under Mac OS X Tiger.

Since the issue is about the Oracle 10g client OCI, trapping the SIGCHLD signal, I modified both the oci_error_p and tcl_error_p in nsoracle.c (version 2.7 of the driver) to restore the signal, as following:

static int
oci_error_p (char *file, int line, char *fn,
	     Ns_DbHandle *dbh, char *ocifn, char *query,
	     oci_status_t oci_status)
  /* for info we get from Oracle */
  char *msgbuf;
  /* what we will actually print out in the log */
  char *buf;
  /* exception code for Ns_DbSetException */
  char exceptbuf[EXCEPTION_CODE_SIZE + 1];
  ora_connection_t *connection = 0;
  ub2 offset = 0;
  sb4 errorcode = 0;
  if (dbh)
    connection = dbh->connection;
  /* Restore SIGCHLD since Oracle10 client has trapped it **SG** */
  signal(SIGCHLD, SIG_DFL);

My modification is in bold. I applied exactly the same one-liner to tcl_error_p as well. You may also need to include the signal header file at the top of nsoracle.c

/* Signal processing interface */
#include <sys/signal.h>

I hope this can be of some help to people experiencing the "error waiting for process to exit: child process lost (is SIGCHLD ignored or trapped?)" problem.