smbstatus getting a SIGBUS error
Arnold Troeger
stssart at bkk.unocal.com
Mon Jun 12 09:15:54 GMT 2000
Somemore information regarding the smbstatus error.
The sigbus error is occuring where I noted below. I now have data
values to go along with the location. The SIGBUS generating bit is
"entry_scanner_p->e.pid" which looks to be in an unaccessable area of
memory. Looking back through the code, I find a couple of bizarities.
For example file_scanner_p->num_share_mode_entries comes back as
1651272501, which, if I understand the code, is a bit large. It looks
as if the code is accessing memory it's not supposed to be accessing.
Well, it looks like a memory error. I'd been meaning to try out the new
version of Purify anyway, so I guess I'll go ahead and download it.
Feel free to jump in with comments or questions
Best regards
Arnold
Here's the offending routine:
/*******************************************************************
call the specified function on each entry under management by the
share mode system
********************************************************************/
static int shm_share_forall(void (*fn)(share_mode_entry *, char *))
{
int i, count=0;
int *mode_array;
share_mode_record *file_scanner_p;
shm_share_mode_entry *entry_scanner_p;
mode_array = (int
*)shmops->offset2addr(shmops->get_userdef_off());
for( i = 0; i < shmops->hash_size(); i++) {
shmops->lock_hash_entry(i);
if(mode_array[i] == 0) {
shmops->unlock_hash_entry(i);
continue;
}
file_scanner_p = (share_mode_record
*)shmops->offset2addr(mode_array[i]);
while((file_scanner_p != 0) &&
(file_scanner_p->num_share_mode_entries != 0)) {
shm_share_mode_entry *entry_scanner_p =
(shm_share_mode_entry *)
shmops->offset2addr(file_scanner_p->share_mode_entries);
while(entry_scanner_p != 0) {
if
(process_exists(entry_scanner_p->e.pid)) {
fn(&entry_scanner_p->e,
file_scanner_p->file_name);
count++;
}
entry_scanner_p =
(shm_share_mode_entry *)
shmops->offset2addr(
entry_scanner_p->next_share_mode_entry);
} /* end while entry_scanner_p */
file_scanner_p = (share_mode_record *)
shmops->offset2addr(file_scanner_p->next_offset)
;
} /* end while file_scanner_p */
shmops->unlock_hash_entry(i);
} /* end for */
return count;
}
-------- Original Message --------
Subject: smbstatus getting a SIGBUS error
Date: Thu, 08 Jun 2000 13:52:13 +0700
From: Arnold Troeger <stssart at bkk.unocal.com>
To: samba-bugs at samba.org
CC: arnold.troeger at bkk.unocal.com
I'm running Samba 2.0.7 and have been having a few problems with it.
Just to keep things focused, I'll stick with smbstatus as this one has
been the longest lasting problem. The problem: smbstatus functions
normally for some small bit of time after the samba daemons are
started. At some point after a significant number of users have
connected to the Samba server, smbstatus starts crashing with a bus
error. In this state, it will report on the connections but fails when
looking at the locks. I had a go at running gdb on the program and have
located the point of failure in "locking_shm.c" in the
"shm_share_forall"
routine: line 636
(gdb) s
shm_offset2addr (offset=1096040751) at ../locking/shmem_sysv.c:154
154 if (offset == 0 )
(gdb) s
157 if (!shm_header_p)
(gdb) s
160 return (void *)((char *)shm_header_p + offset);
(gdb) s
161 }
(gdb) s
shm_share_forall (fn=0x136b4 <print_share_mode>)
at ../locking/locking_shm.c:634
634 while(entry_scanner_p != 0) {
(gdb) s
636 if
(process_exists(entry_scanner_p->e.pid)) {
(gdb) s
Program received signal SIGBUS, Bus error.
0x17b88 in shm_share_forall (fn=0x136b4 <print_share_mode>)
at ../locking/locking_shm.c:636
636 if
(process_exists(entry_scanner_p->e.pid)) {
(gdb)
My Samba server is an E4000 with 6 CPUs running Solaris 2.6 and set up
with 1.3 TeraBytes of disk.
Thanks in advance for your assistance.
Best regards,
Arnold
More information about the samba
mailing list