Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 28 Sep 1996 02:09:13 -0700
From:      Julian Elischer <julian@whistle.com>
To:        current@FreeBSD.org
Subject:   Re: Locking snafu in -current
Message-ID:  <324CEB39.41C67EA6@whistle.com>
References:  <324CDD35.167EB0E7@whistle.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Julian Elischer wrote:
> 
> This seems to have been present for a long time..

looking at the hung process 447


sendmail 447 177 177 177 -1,-1 noflags -1,-1 0,369364 2,336634 lockf 0 0

we see it is waiting on a lock structure.. (lockf lock string)
in the proc structure:

  p_wchan = 0xf0ae58c0, 
  p_wmesg = 0xf01e17d4 "lockf", 

 print *(struct lockf *) 0xf0ae58c0 yields
$20 = {
  lf_flags = 48, 
  lf_type = 3, 
  lf_start = 0x0000000000000000, 
  lf_end = 0xffffffffffffffff, 
  lf_id = 0xf0ad0cc0 "\200^\n@\001", 
  lf_head = 0xf0a9d530, 
  lf_next = 0xf0a9f900, 
  lf_block = 0xf0ad8080
}

following lf_head yields:
$21 = (struct lockf *) 0xf0a9f900
which is the same as "lf_next" (?)


but backtracking through the "lf_block yields:
(in sequence)
  lf_head = 0xf0a9d530, 
  lf_next = 0xf0a9f900, 
  lf_block = 0xf0aebf00

 lf_head = 0xf0a9d530, 
  lf_next = 0xf0a9f900, 
  lf_block = 0xf0af4940

  lf_head = 0xf0a9d530, 
  lf_next = 0xf0a9f900, 
  lf_block = 0xf0af4100

  lf_head = 0xf0a9d530, 
  lf_next = 0xf0a9f900, 
  lf_block = 0xf0af9c00

  lf_head = 0xf0a9d530, 
  lf_next = 0xf0a9f900, 
  lf_block = 0xf0af9640

  lf_head = 0xf0a9d530, 
  lf_next = 0xf0a9f900, 
  lf_block = 0xf0afcc00

  lf_head = 0xf0a9d530, 
  lf_next = 0xf0a9f900, 
  lf_block = 0xf0afcd40

$29 = {
  lf_flags = 48, 
  lf_type = 3, 
  lf_start = 0x0000000000000000, 
  lf_end = 0xffffffffffffffff, 
  lf_id = 0xf0afca00 "", 
  lf_head = 0xf0a9d530, 
  lf_next = 0xf0a9f900, 
  lf_block = 0x0
}
Now we have reached the head of the locking chain..
now we notice that ALL of these lock structures are pointing to 
  lf_next = 0xf0a9f900, 
which is where the original 'head' was pointing.
If we take the hint and go there.. we see:
$30 = {
  lf_flags = 48, 
  lf_type = 3, 
  lf_start = 0x0000000000000000, 
  lf_end = 0xffffffffffffffff, 
  lf_id = 0xf0a9fb80 "\200", 
  lf_head = 0xf0a9d530, 
  lf_next = 0x0, 
  lf_block = 0xf0a9f200
}


so if we start at the head, there is no forward pointer to all those
lock structures we back-tracked through..
This is all very confusing as the lf_id is different
for all these as well.
it doesn't make sense to me..
if anyone has a suggestion as to what to 
look at next, I'll leave the machine inthe debugger
and can look at snything over the weekend....

there's deffinitly a bug, but I don't know what.
possibly it's in sendmail, but.. who knows.

julian



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?324CEB39.41C67EA6>