Boost logo

Boost-Build :

Subject: Re: [Boost-build] bjam bug invoking codeworker
From: Fabien CHÊNE (fabien.chene_at_[hidden])
Date: 2009-10-26 09:02:14


[...]
>> bjam is stucked line 470:
>>
>> 455 if ( 0 < globs.timeout )
>> 456 {
>> 457     /* Force select() to timeout so we can terminate expired processes.
>> 458     */
>> 459     tv.tv_sec = select_timeout;
>> 460     tv.tv_usec = 0;
>> 461
>> 462     /* select() will wait until: i/o on a descriptor, a signal, or we
>> 463     * time out.
>> 464     */
>> 465     ret = select( fd_max + 1, &fds, 0, 0, &tv );
>> 466  }
>> 467  else
>> 468  {
>> 469      /* select() will wait until i/o on a descriptor or a signal. */
>> 470      ret = select( fd_max + 1, &fds, 0, 0, 0 );
>> 471 }
>>
>> Any ideas ?
>> Can it be a bug in CodeWorker ?
>
> Not clear yet. When the hang happens, is there still a codeworker process?

Definitely.

> Can you attach to it with gdb, and get backtrace? Please check if it has
> multiple threads -- using 'info thread' -- if so, use "thread apply all bt"
> to get backtrace as opposed to regular "bt"

There is only one thread in codeworker, stucked on a tcsetattr call:

(gdb) bt
#0 0x002ca7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
#1 0x00bbf400 in tcsetattr () from /lib/tls/libc.so.6
#2 0x0808d4bf in initKeyboard () at CGRuntime.cpp:115
#3 0x082258ca in Workspace (this=0xbff323d0) at Workspace.cpp:58
#4 0x0808e595 in CodeWorker::CGRuntime::entryPoint (iNargs=4,
    tsArgs=0xbff32564, executeFunction=0x0) at CGRuntime.cpp:383
#5 0x08241c98 in main ()
(gdb) f 2
#2 0x0808d4bf in initKeyboard () at CGRuntime.cpp:115
115 tcsetattr(0, TCSANOW, &new_settings);
(gdb) l
110 new_settings.c_lflag &= ~(ICANON | ECHO);
111 new_settings.c_iflag &= ~(ISTRIP | IGNCR | ICRNL | INLCR | IXOFF | IXON);
112 new_settings.c_cc[VMIN] = 0;
113 new_settings.c_cc[VTIME] = 0;
114 #ifndef CODEWORKER_GNU_READLINE
115 tcsetattr(0, TCSANOW, &new_settings);
116 #endif
117 signal(SIGINT, catch_sig);
118 signal(SIGHUP, catch_sig);
119 signal(SIGTERM, catch_sig);

(gdb) set print pretty on
(gdb) p new_settings
$2 = {
  c_iflag = 0,
  c_oflag = 1,
  c_cflag = 191,
  c_lflag = 35377,
  c_line = 0 '\0',
  c_cc = "\003\034\000\000\004\000\000\000\021\023\032\000\022\017\027\026",
'\0' <repeats 15 times>,
  c_ispeed = 15,
  c_ospeed = 15
}

-- 
Fab

Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk