Opened 16 years ago

Closed 16 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 16 years ago by Nicolas

Can you get the data inside sbuf from gdb? I think just "print sbuf" will recursively output all the structure members.

comment:2 Changed 16 years ago by Nicolas

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 16 years ago by Nicolas

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)

comment:4 Changed 16 years ago by davea

Resolution: fixed
Status: newclosed

fixed in [14996]

Note: See TracTickets for help on using tickets.