From: Teds Ups List (Teds_Ups_List_at_centrinity.com)
Date: Tue May 08 2001 - 16:57:34 BST
I wrote: >The second is that ups seems to run the program automatically (i.e. as if the -go option were >specified). If the program starts up successfully, the ups window is never displayed. If it fails >(and hence exits) the ups window is displayed (after I get the startup error messages) and I >can debug normally. I tried specifying the -go option, and the program ran *twice* before >the ups window was displayed. This seems to be timing related. I ran ups 3.35 under itself ("ups ups -a <prog>"). There seems to be a critical section around the vfork() in ao_elflib.c. Here is the code: if ((pid = vfork()) == -1) { errf("Vfork failed: %s", get_errno_str()); fclose(fp); close(fds[1]); free((char *)envp); return FALSE; } if (pid == 0) { close(fds[0]); if (fds[1] != 1) dup2(fds[1], 1); execle(textpath, textpath, (char *)NULL, envp); failmesg("Can't exec", "", textpath); _exit(1); } free((char *)envp); I found that if I put a breakpoint on the "if (pid == 0)") and continue from it, the debugged program does not run before ups comes up, and everything works as expected. If I move the breakpoint down to the next executed statement ( "free((char *)envp);", then the debugged program runs before ups comes up (and before the breakpoint is reached). That's as far as I've been able to trace things. I suppose the next thing is to start putting sleeps in the code to see if that helps, but I don't have time right now. I hope that helps narrow down the problem. P.S. To repeat, I'm seeing this problem on Red Hat 6.2, with both ups and my program compiled with gcc/g++ 2.95.2.
This archive was generated by hypermail 2.1.4 : Wed Feb 13 2002 - 21:51:33 GMT