Opened 17 years ago
Closed 17 years ago
#655 closed Defect (fixed)
boinc crashes frequently on mac mini powerpc hardware
Reported by: | fthomas | Owned by: | davea |
---|---|---|---|
Priority: | Undetermined | Milestone: | Undetermined |
Component: | Client - Daemon | Version: | 5.10.45 |
Keywords: | Cc: | fthomas |
Description
This bug has been reported in Debian's BTS (#479204):
boinc-client 5.10.45-2 fails to run for any significant period of time on my powerpc (mac mini) hardware. The version in debian stable works with no trouble (5.4.11-4). Here is a segment from the log file and a back trace using gdb.
log file segment:
SIGSEGV: segmentation violation Stack trace (7 frames): /usr/bin/boinc_client[0x100544a0] [0x100344] /usr/bin/boinc_client[0x1003e08c] /usr/bin/boinc_client[0x10019f70] /usr/bin/boinc_client[0x1004397c] /lib/libc.so.6[0xf9f4720] /lib/libc.so.6[0xf9f48e0]
gdb session:
(gdb) run --check_all_logins --redirectio --dir /var/lib/boinc-client Starting program: /usr/bin/boinc_client --check_all_logins --redirectio --dir /var/lib/boinc-client [Thread debugging using libthread_db enabled] [New Thread 0x48026880 (LWP 19048)] Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x48026880 (LWP 19048)] HOST_INFO::users_idle (this=<value optimized out>, check_all_logins=false, idle_time_to_run=<value optimized out>) at hostinfo_unix.C:774 774 hostinfo_unix.C: No such file or directory. in hostinfo_unix.C (gdb) bt #0 HOST_INFO::users_idle (this=<value optimized out>, check_all_logins=false, idle_time_to_run=<value optimized out>) at hostinfo_unix.C:774 #1 0x10019f70 in CLIENT_STATE::poll_slow_events (this=0x10099878) at client_state.C:499 #2 0x1004397c in boinc_main_loop () at main.C:471 #3 0x0f9f4720 in ?? () from /lib/libc.so.6 #4 0x0f9f48e0 in __libc_start_main () from /lib/libc.so.6 #5 0x00000000 in ?? ()
The code from client/hostinfo_unix.C
which causes the SIGSEGV is:
766: inline bool all_tty_idle(time_t t, char *device, char first_char, int num_tty) { 767: struct stat sbuf; 768: char *tty_index = device + strlen(device) - 1; 769: *tty_index = first_char; 770: for (int i = 0; i < num_tty; i++, (*tty_index)++) { 771: if (stat(device, &sbuf)) { 772: // error looking at device; don't try any more 773: return true; 774: } else if (sbuf.st_atime >= t) { 775: return false; 776: } 777: } 778: return true; 779: }
Change History (4)
comment:1 Changed 17 years ago by
comment:2 Changed 17 years ago by
Also, why is users_idle
getting called with check_all_logins=false
if the --check_all_logins
argument is being passed to the program?
comment:3 Changed 17 years ago by
Okay now I'm fully confused.
The backtrace mentions users_idle
as the top stack frame, yet that function is in line 870. users_idle
calls all_tty_idle
only if check_all_logins
is true
, which according to the backtrace it's not.
Also, the backtrace definitely lacks something. If I put together the backtrace from gdb, and what was printed in the log:
/usr/bin/boinc_client[0x100544a0] = not listed in bt! [0x100344] = not listed in bt! /usr/bin/boinc_client[0x1003e08c] = *presumably* HOST_INFO::users_idle at hostinfo_unix.C:774 /usr/bin/boinc_client[0x10019f70] = CLIENT_STATE::poll_slow_events at client_state.C:499 /usr/bin/boinc_client[0x1004397c] = boinc_main_loop at main.C:471 /lib/libc.so.6[0xf9f4720] = ?? () (libc6) /lib/libc.so.6[0xf9f48e0] = __libc_start_main () (libc6)
Can you look up what function/line number correspond to 0x1003e08c
and 0x100544a0
? (addr2line)
Can you get the data inside
sbuf
from gdb? I think just "print sbuf" will recursively output all the structure members.