On Mon, Jun 18, 2001 at 11:20:36PM -0400, Troy Settle wrote:

% How would I need to go about building a dubug version of qmail-remote?

I set conf-cc and conf-ld to 'gcc -g', edited timeoutread.c slightly
to save the return value of the select in a variable, then built
qmail-remote and put it in place of the live one.  I'll attach a patch
matching what I did to timeoutread.c.

% Also, how to terminate the process so that I can 'fling' gdb at it?

I wasn't planning on terminating it.  Rather I was thinking of using
gdb's "attach" command to take over the process, and then start
examining variables.  Mostly, I was going to wing it.

I expect the full attachment sequence to look something like this:

(gdb) attach <pid-of-stuck-qmail-remote>
(gdb) symbol-file /var/qmail/bin/qmail-remote
(gdb) directory <path-to-qmail-source-with-modified-timeoutread.c>
(gdb) bt
(gdb) up   <-- repeat until at timeoutread() stack frame
(gdb) p res
(gdb) p fd
(gdb) p rfds   <-- or something like that

% With a little I can probably have output from gdb within a couple hours.

Good luck, then.


Mark

--- timeoutread.c       Mon Jun 15 03:53:16 1998
+++ timeoutread.c       Mon Jun 18 22:23:24 2001
@@ -7,6 +7,7 @@
 {
   fd_set rfds;
   struct timeval tv;
+  int res;
 
   tv.tv_sec = t;
   tv.tv_usec = 0;
@@ -14,7 +15,8 @@
   FD_ZERO(&rfds);
   FD_SET(fd,&rfds);
 
-  if (select(fd + 1,&rfds,(fd_set *) 0,(fd_set *) 0,&tv) == -1) return -1;
+  res = select(fd + 1,&rfds,(fd_set *) 0,(fd_set *) 0,&tv);
+  if (res == -1) return -1;
   if (FD_ISSET(fd,&rfds)) return read(fd,buf,len);
 
   errno = error_timeout;

Reply via email to