This is the mail archive of the glibc-bugs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug nptl/19004] tst-robust8 fails intermittently on x86_64


https://sourceware.org/bugzilla/show_bug.cgi?id=19004

Paulo Andrade <paulo.cesar.pereira.de.andrade at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Attachment #8927|0                           |1
        is obsolete|                            |

--- Comment #9 from Paulo Andrade <paulo.cesar.pereira.de.andrade at gmail dot com> ---
Created attachment 8934
  --> https://sourceware.org/bugzilla/attachment.cgi?id=8934&action=edit
robust_test.stp

Updated stap script, and s/robust_test2/robust_test/

  Now I can easily trigger again the issue, instrumenting
with systemtap:

0 S root     19653 19650  0  80   0 -  1584 kretpr 11:13 pts/1    00:00:00
./robust_test
1 S root     19656 19653  0  80   0 -  1582 kretpr 11:13 pts/1    00:00:00
./robust_test
1 Z root     19708 19653  0  80   0 -     0 kretpr 11:13 pts/1    00:00:00
[robust_test] <defunct>
1 Z root     19711 19653  0  80   0 -     0 kretpr 11:13 pts/1    00:00:00
[robust_test] <defunct>
1 S root     19712 19653  0  80   0 -  1584 kretpr 11:13 pts/1    00:00:00
./robust_test
1 S root     19713 19653  0  80   0 -  1584 kretpr 11:13 pts/1    00:00:00
./robust_test
1 Z root     19714 19653  0  80   0 -     0 kretpr 11:13 pts/1    00:00:00
[robust_test] <defunct>
1 S root     19715 19653  0  80   0 -  1584 kretpr 11:13 pts/1    00:00:00
./robust_test
1 S root     19716 19653  0  80   0 -  1584 kretpr 11:13 pts/1    00:00:00
./robust_test
1 Z root     19717 19653  0  80   0 -     0 kretpr 11:13 pts/1    00:00:00
[robust_test] <defunct>

 A few pages of the systemtap output:

[19697] > handle_futex_death(uaddr=0x7f87da9cd000 curr=0xffff8800c1608000
pi=0x0)
[19697] < handle_futex_death() return=0x0
[19697] < exit_robust_list() 
[19697] < mm_release() 
[19653] > schedule()
[19653] < schedule() 
[19697]  signal.send SIGCHLD to 19653
[19697] > schedule()
[19653] > syscall.wait4(upid=0x4cf1 stat_addr=0x7ffc78b0308c options=0x0
ru=0x0)
[19653] < syscall.wait4() return=0x4cf1
[19707] > syscall.set_robust_list(head=0x7f87da9a9a20 len=0x18)
[19707] < syscall.set_robust_list() return=0x0
[19707] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19653] > pthread_mutex_unlock(mutex=0x7f87da9cd000)
[19707] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19653] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9cd000)
[19707] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cc5 utime=0x0
uaddr2=0x80 val3=0x0)
[19707] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cc5 abs_time=0x0
bitset=0xffffffff)
[19653] > __pthread_mutex_unlock_full(mutex=0x7f87da9cd000 decr=0x1)
[19707] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cc5 flags=0x1
q=0xffff88020b5c3dc8 hb=0xffff88020b5c3d58)
[19707] < futex_wait() return=0x0
[19707] > futex_wait_queue_me(hb=0xffffc90001893fc0 q=0xffff88020b5c3dc8
timeout=0x0)
[19707] > schedule()
[19653] > syscall.futex(uaddr=0x7f87da9cd000 op=0x1 val=0x1
utime=0x7f87da9a9a10 uaddr2=0x7f87da9cd000 val3=0x4cc5)
[19653] < syscall.futex() return=0x1
[19702] < schedule() 
[19653] < 0x4011a7() return=0x0
[19702] < futex_wait() 
[19653] < 0x4011a7() return=0x0
[19702] < do_futex() return=0x0
[19708] > syscall.set_robust_list(head=0x7f87da9a9a20 len=0x18)
[19702] < syscall.futex() return=0x0
[19708] < syscall.set_robust_list() return=0x0
[19653]  signal.send SIGTERM to 19701
[19702] < 0x401122() return=0x0
[19702] < 0x401122() return=0x0
[19701] < schedule() 
[19653] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19701] < futex_wait() 
[19702] > pthread_mutex_unlock(mutex=0x7f87da9cd000)
[19701] < do_futex() return=0xfffffffffffffe00
[19653] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19701] < syscall.futex() return=0xfffffffffffffe00
[19702] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9cd000)
[19701]  do_exit(code=0xf)
[19702] > __pthread_mutex_unlock_full(mutex=0x7f87da9cd000 decr=0x1)
[19701]  exit_mm(tsk=0xffff88030a4d4500)
[19653] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cf6 utime=0x0
uaddr2=0x80 val3=0x0)
[19701] > mm_release(tsk=0xffff88030a4d4500 mm=0xffff8803046e12c0)
[19653] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cf6 abs_time=0x0
bitset=0xffffffff)
[19702] > syscall.futex(uaddr=0x7f87da9cd000 op=0x1 val=0x1
utime=0x7f87da9cd020 uaddr2=0x7f87da9cd000 val3=0x0)
[19701] > exit_robust_list(curr=0xffff88030a4d4500)
  head         = 0x7f87da9a9a20
  &head.list   = 0x7f87da9a9a20
  entry        = 0x7f87da9cd020
  next         = 0x0
  futex_offset = -32
  pending      = 0x7f87da9cd020
[19653] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cf6 flags=0x1
q=0xffff8801df113dc8 hb=0xffff8801df113d58)
[19702] < syscall.futex() return=0x1
[19701] > handle_futex_death(uaddr=0x7f87da9cd000 curr=0xffff88030a4d4500
pi=0x0)
[19653] < futex_wait() return=0xfffffffffffffff5
[19702] < 0x4011a7() return=0x0
[19701] < handle_futex_death() return=0x0
[19701] < exit_robust_list() 
[19653] < do_futex() return=0xfffffffffffffff5
[19702] < 0x4011a7() return=0x0
[19701] < mm_release() 
[19653] < syscall.futex() return=0xfffffffffffffff5
[19653] < 0x401122() return=0x0
[19708] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19653] < 0x401122() return=0x0
[19653] > syscall.wait4(upid=0x4cf5 stat_addr=0x7ffc78b0308c options=0x0
ru=0x0)
[19653] > schedule()
[19702] > __pthread_mutex_lock(mutex=0x7f87da9d0908)
[19708] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19702] < _dl_fini() return=0x0
[19708] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cc5 utime=0x0
uaddr2=0x80 val3=0x0)
[19708] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cc5 abs_time=0x0
bitset=0xffffffff)
[19708] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cc5 flags=0x1
q=0xffff8801de85bdc8 hb=0xffff8801de85bd58)
[19708] < futex_wait() return=0x0
[19702] > pthread_mutex_unlock(mutex=0x7f87da9d0908)
[19708] > futex_wait_queue_me(hb=0xffffc90001893fc0 q=0xffff8801de85bdc8
timeout=0x0)
[19708] > schedule()
[19702] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9d0908)
[19702] < _dl_fini() return=0x0
[19702]  do_exit(code=0x0)
[19702]  exit_mm(tsk=0xffff88030a4d0b80)
[19701]  signal.send SIGCHLD to 19653
[19702] > mm_release(tsk=0xffff88030a4d0b80 mm=0xffff8803046e3840)
[19701] > schedule()
[19653] < schedule() 
[19703] < schedule() 
[19702] > exit_robust_list(curr=0xffff88030a4d0b80)
  head         = 0x7f87da9a9a20
  &head.list   = 0x7f87da9a9a20
  entry        = 0x7f87da9cd020
  next         = 0x7f87da9a9a20
  futex_offset = -32
  pending      = 0x0
[19703] < futex_wait() 
[19702] > handle_futex_death(uaddr=0x7f87da9cd000 curr=0xffff88030a4d0b80
pi=0x0)
[19653] < syscall.wait4() return=0x4cf5
[19702] < handle_futex_death() return=0x0
[19703] < do_futex() return=0x0
[19702] < exit_robust_list() 
[19703] < syscall.futex() return=0x0
[19702] < mm_release() 
[19703] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cc5 utime=0x0
uaddr2=0x80 val3=0x0)
[19703] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cc5 abs_time=0x0
bitset=0xffffffff)
[19703] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cc5 flags=0x1
q=0xffff88026a2fbdc8 hb=0xffff88026a2fbd58)
[19703] < futex_wait() return=0x0
[19703] > futex_wait_queue_me(hb=0xffffc90001893fc0 q=0xffff88026a2fbdc8
timeout=0x0)
[19703] > schedule()
[19702] > schedule()
[19702] < schedule() 
[19702]  signal.send SIGCHLD to 19653
[19702] > schedule()
[19653] > syscall.wait4(upid=0x4cf6 stat_addr=0x7ffc78b0308c options=0x0
ru=0x0)
[19653] < syscall.wait4() return=0x4cf6
[19709] > syscall.set_robust_list(head=0x7f87da9a9a20 len=0x18)
[19709] < syscall.set_robust_list() return=0x0
[19709] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19653] > pthread_mutex_unlock(mutex=0x7f87da9cd000)
[19709] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19653] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9cd000)
[19653] > __pthread_mutex_unlock_full(mutex=0x7f87da9cd000 decr=0x1)
[19709] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cc5 utime=0x0
uaddr2=0x80 val3=0x0)
[19709] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cc5 abs_time=0x0
bitset=0xffffffff)
[19653] > syscall.futex(uaddr=0x7f87da9cd000 op=0x1 val=0x1
utime=0x7f87da9a9a10 uaddr2=0x7f87da9cd000 val3=0x4cc5)
[19710] > syscall.set_robust_list(head=0x7f87da9a9a20 len=0x18)
[19710] < syscall.set_robust_list() return=0x0
[19709] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cc5 flags=0x1
q=0xffff8801de85fdc8 hb=0xffff8801de85fd58)
[19653] < syscall.futex() return=0x1
[19709] < futex_wait() return=0xfffffffffffffff5
[19653] < 0x4011a7() return=0x0
[19709] < do_futex() return=0xfffffffffffffff5
[19653] < 0x4011a7() return=0x0
[19709] < syscall.futex() return=0xfffffffffffffff5
[19709] < 0x401122() return=0x0
[19653]  signal.send SIGTERM to 19703
[19709] < 0x401122() return=0x0
[19653] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19709] > pthread_mutex_unlock(mutex=0x7f87da9cd000)
[19703] < schedule() 
[19703] < futex_wait() 
[19709] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9cd000)
[19653] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19703] < do_futex() return=0xfffffffffffffe00
[19703] < syscall.futex() return=0xfffffffffffffe00
[19709] > __pthread_mutex_unlock_full(mutex=0x7f87da9cd000 decr=0x1)
[19703]  do_exit(code=0xf)
[19653] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cfd utime=0x0
uaddr2=0x80 val3=0x0)
[19703]  exit_mm(tsk=0xffff88030a4d6780)
[19709] > syscall.futex(uaddr=0x7f87da9cd000 op=0x1 val=0x1
utime=0x7f87da9cd020 uaddr2=0x7f87da9cd000 val3=0x0)
[19653] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cfd abs_time=0x0
bitset=0xffffffff)
[19703] > mm_release(tsk=0xffff88030a4d6780 mm=0xffff8803046e5dc0)
[19709] < syscall.futex() return=0x1
[19653] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cfd flags=0x1
q=0xffff8801df113dc8 hb=0xffff8801df113d58)
[19710] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19709] < 0x4011a7() return=0x0
[19653] < futex_wait() return=0xfffffffffffffff5
[19703] > exit_robust_list(curr=0xffff88030a4d6780)
  head         = 0x7f87da9a9a20
  &head.list   = 0x7f87da9a9a20
  entry        = 0x7f87da9cd020
  next         = 0x0
  futex_offset = -32
  pending      = 0x7f87da9cd020
[19709] < 0x4011a7() return=0x0
[19653] < do_futex() return=0xfffffffffffffff5
[19653] < syscall.futex() return=0xfffffffffffffff5
[19703] > handle_futex_death(uaddr=0x7f87da9cd000 curr=0xffff88030a4d6780
pi=0x0)
[19703] < handle_futex_death() return=0x0
[19703] < exit_robust_list() 
[19653] < 0x401122() return=0x0
[19703] < mm_release() 
[19653] < 0x401122() return=0x0
[19710] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19653] > syscall.wait4(upid=0x4cfd stat_addr=0x7ffc78b0308c options=0x0
ru=0x0)
[19709] > __pthread_mutex_lock(mutex=0x7f87da9d0908)
[19710] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cc5 utime=0x0
uaddr2=0x80 val3=0x0)
[19653] > schedule()
[19709] < _dl_fini() return=0x0
[19710] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cc5 abs_time=0x0
bitset=0xffffffff)
[19710] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cc5 flags=0x1
q=0xffff88020b5a3dc8 hb=0xffff88020b5a3d58)
[19710] < futex_wait() return=0x0
[19709] > pthread_mutex_unlock(mutex=0x7f87da9d0908)
[19709] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9d0908)
[19710] > futex_wait_queue_me(hb=0xffffc90001893fc0 q=0xffff88020b5a3dc8
timeout=0x0)
[19710] > schedule()
[19709] < _dl_fini() return=0x0
[19709]  do_exit(code=0x0)
[19709]  exit_mm(tsk=0xffff88030a4d2280)
[19709] > mm_release(tsk=0xffff88030a4d2280 mm=0xffff8803046e3200)
[19709] > exit_robust_list(curr=0xffff88030a4d2280)
  head         = 0x7f87da9a9a20
  &head.list   = 0x7f87da9a9a20
  entry        = 0x7f87da9cd020
  next         = 0x7f87da9a9a20
  futex_offset = -32
  pending      = 0x0
[19703]  signal.send SIGCHLD to 19653
[19709] > handle_futex_death(uaddr=0x7f87da9cd000 curr=0xffff88030a4d2280
pi=0x0)
[19703] > schedule()
[19709] < handle_futex_death() return=0x0
[19709] < exit_robust_list() 
[19709] < mm_release() 
[19709]  signal.send SIGCHLD to 19653
[19709] > schedule()
[19704] < schedule() 
[19653] < schedule() 
[19704] < futex_wait() 
[19704] < do_futex() return=0x0
[19704] < syscall.futex() return=0x0
[19653] < syscall.wait4() return=0x4cfd
[19704] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cc5 utime=0x0
uaddr2=0x80 val3=0x0)
[19704] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cc5 abs_time=0x0
bitset=0xffffffff)
[19704] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cc5 flags=0x1
q=0xffff88026a2ffdc8 hb=0xffff88026a2ffd58)
[19704] < futex_wait() return=0x0
[19704] > futex_wait_queue_me(hb=0xffffc90001893fc0 q=0xffff88026a2ffdc8
timeout=0x0)
[19704] > schedule()
[19705] < schedule() 
[19705] < futex_wait() 
[19705] < do_futex() return=0x0
[19705] < syscall.futex() return=0x0
[19705] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cc5 utime=0x0
uaddr2=0x80 val3=0x0)
[19705] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cc5 abs_time=0x0
bitset=0xffffffff)
[19705] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cc5 flags=0x1
q=0xffff8801df15bdc8 hb=0xffff8801df15bd58)
[19705] < futex_wait() return=0x0
[19705] > futex_wait_queue_me(hb=0xffffc90001893fc0 q=0xffff8801df15bdc8
timeout=0x0)
[19705] > schedule()
[19653] > syscall.wait4(upid=0x4cf7 stat_addr=0x7ffc78b0308c options=0x0
ru=0x0)
[19653] < syscall.wait4() return=0x4cf7
[19711] > syscall.set_robust_list(head=0x7f87da9a9a20 len=0x18)
[19711] < syscall.set_robust_list() return=0x0
[19711] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19711] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19711] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cc5 utime=0x0
uaddr2=0x80 val3=0x0)
[19711] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cc5 abs_time=0x0
bitset=0xffffffff)
[19711] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cc5 flags=0x1
q=0xffff88020b5a7dc8 hb=0xffff88020b5a7d58)
[19711] < futex_wait() return=0x0
[19711] > futex_wait_queue_me(hb=0xffffc90001893fc0 q=0xffff88020b5a7dc8
timeout=0x0)
[19653] > pthread_mutex_unlock(mutex=0x7f87da9cd000)
[19711] > schedule()
[19653] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9cd000)
[19712] > syscall.set_robust_list(head=0x7f87da9a9a20 len=0x18)
[19712] < syscall.set_robust_list() return=0x0
[19653] > __pthread_mutex_unlock_full(mutex=0x7f87da9cd000 decr=0x1)
[19653] > syscall.futex(uaddr=0x7f87da9cd000 op=0x1 val=0x1 utime=0x0
uaddr2=0x7f87da9cd000 val3=0x4)
[19653] < syscall.futex() return=0x1
[19706] < schedule() 
[19653] < 0x4011a7() return=0x0
[19706] < futex_wait() 
[19706] < do_futex() return=0x0
[19653] < 0x4011a7() return=0x0
[19706] < syscall.futex() return=0x0
[19706] < 0x401122() return=0x0
[19653]  signal.send SIGTERM to 19707
[19706] < 0x401122() return=0x0
[19653] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19707] < schedule() 
[19706] > pthread_mutex_unlock(mutex=0x7f87da9cd000)
[19707] < futex_wait() 
[19706] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9cd000)
[19653] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19707] < do_futex() return=0xfffffffffffffe00
[19707] < syscall.futex() return=0xfffffffffffffe00
[19653] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cfa utime=0x0
uaddr2=0x80 val3=0x0)
[19706] > __pthread_mutex_unlock_full(mutex=0x7f87da9cd000 decr=0x1)
[19653] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cfa abs_time=0x0
bitset=0xffffffff)
[19707]  do_exit(code=0xf)
[19706] > syscall.futex(uaddr=0x7f87da9cd000 op=0x1 val=0x1
utime=0x7f87da9cd020 uaddr2=0x7f87da9cd000 val3=0x0)
[19712] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19707]  exit_mm(tsk=0xffff88030a4d3980)
[19653] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cfa flags=0x1
q=0xffff8801df113dc8 hb=0xffff8801df113d58)
[19706] < syscall.futex() return=0x1
[19707] > mm_release(tsk=0xffff88030a4d3980 mm=0xffff8803046e2580)
[19653] < futex_wait() return=0xfffffffffffffff5
[19706] < 0x4011a7() return=0x0
[19653] < do_futex() return=0xfffffffffffffff5
[19706] < 0x4011a7() return=0x0
[19653] < syscall.futex() return=0xfffffffffffffff5
[19707] > exit_robust_list(curr=0xffff88030a4d3980)
  head         = 0x7f87da9a9a20
  &head.list   = 0x7f87da9a9a20
  entry        = 0x7f87da9cd020
  next         = 0x0
  futex_offset = -32
  pending      = 0x7f87da9cd020
[19712] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19707] > handle_futex_death(uaddr=0x7f87da9cd000 curr=0xffff88030a4d3980
pi=0x0)
[19653] < 0x401122() return=0x0
[19707] < handle_futex_death() return=0x0
[19653] < 0x401122() return=0x0
[19707] < exit_robust_list() 
[19712] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cc5 utime=0x0
uaddr2=0x80 val3=0x0)
[19707] < mm_release() 
[19653] > syscall.wait4(upid=0x4cfb stat_addr=0x7ffc78b0308c options=0x0
ru=0x0)
[19712] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cc5 abs_time=0x0
bitset=0xffffffff)
[19653] > schedule()
[19706] > __pthread_mutex_lock(mutex=0x7f87da9d0908)
[19712] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cc5 flags=0x1
q=0xffff88020b5abdc8 hb=0xffff88020b5abd58)
[19712] < futex_wait() return=0x0
[19706] < _dl_fini() return=0x0
[19712] > futex_wait_queue_me(hb=0xffffc90001893fc0 q=0xffff88020b5abdc8
timeout=0x0)
[19712] > schedule()
[19706] > pthread_mutex_unlock(mutex=0x7f87da9d0908)
[19706] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9d0908)
[19706] < _dl_fini() return=0x0
[19706]  do_exit(code=0x0)
[19706]  exit_mm(tsk=0xffff88030a4d2e00)
[19706] > mm_release(tsk=0xffff88030a4d2e00 mm=0xffff8803046e1900)
[19707]  signal.send SIGCHLD to 19653
[19706] > exit_robust_list(curr=0xffff88030a4d2e00)
  head         = 0x7f87da9a9a20
  &head.list   = 0x7f87da9a9a20
  entry        = 0x7f87da9cd020
  next         = 0x7f87da9a9a20
  futex_offset = -32
  pending      = 0x0
[19706] > handle_futex_death(uaddr=0x7f87da9cd000 curr=0xffff88030a4d2e00
pi=0x0)
[19707] > schedule()
[19706] < handle_futex_death() return=0x0
[19706] < exit_robust_list() 
[19706] < mm_release() 
[19653] < schedule() 
[19653] < syscall.wait4() return=0x4cfb
[19706]  signal.send SIGCHLD to 19653
[19706] > schedule()
[19708] < schedule() 
[19708] < futex_wait() 
[19708] < do_futex() return=0x0
[19708] < syscall.futex() return=0x0
[19708] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cc5 utime=0x0
uaddr2=0x80 val3=0x0)
[19708] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cc5 abs_time=0x0
bitset=0xffffffff)
[19708] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cc5 flags=0x1
q=0xffff8801de85bdc8 hb=0xffff8801de85bd58)
[19708] < futex_wait() return=0x0
[19708] > futex_wait_queue_me(hb=0xffffc90001893fc0 q=0xffff8801de85bdc8
timeout=0x0)
[19708] > schedule()
[19653] > syscall.wait4(upid=0x4cfa stat_addr=0x7ffc78b0308c options=0x0
ru=0x0)
[19653] < syscall.wait4() return=0x4cfa
[19653] > pthread_mutex_unlock(mutex=0x7f87da9cd000)
[19653] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9cd000)
[19653] > __pthread_mutex_unlock_full(mutex=0x7f87da9cd000 decr=0x1)
[19653] > syscall.futex(uaddr=0x7f87da9cd000 op=0x1 val=0x1
utime=0x7f87da9a9a10 uaddr2=0x7f87da9cd000 val3=0x4cc5)
[19653] < syscall.futex() return=0x1
[19653] < 0x4011a7() return=0x0
[19653] < 0x4011a7() return=0x0
[19653]  signal.send SIGTERM to 19710
[19653] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19653] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19714] > syscall.set_robust_list(head=0x7f87da9a9a20 len=0x18)
[19653] < 0x401122() return=0x0
[19714] < syscall.set_robust_list() return=0x0
[19653] < 0x401122() return=0x0
[19653] > syscall.wait4(upid=0x4cfe stat_addr=0x7ffc78b0308c options=0x0
ru=0x0)
[19653] > schedule()
[19713] > syscall.set_robust_list(head=0x7f87da9a9a20 len=0x18)
[19713] < syscall.set_robust_list() return=0x0
[19714] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19714] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19714] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cc5 utime=0x0
uaddr2=0x80 val3=0x0)
[19714] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cc5 abs_time=0x0
bitset=0xffffffff)
[19714] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cc5 flags=0x1
q=0xffff88020c567dc8 hb=0xffff88020c567d58)
[19714] < futex_wait() return=0x0
[19714] > futex_wait_queue_me(hb=0xffffc90001893fc0 q=0xffff88020c567dc8
timeout=0x0)
[19714] > schedule()
[19710] < schedule() 
[19710] < futex_wait() 
[19710] < do_futex() return=0x0
[19713] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19710] < syscall.futex() return=0x0
[19710]  do_exit(code=0xf)
[19710]  exit_mm(tsk=0xffff8802bba2ae00)
[19710] > mm_release(tsk=0xffff8802bba2ae00 mm=0xffff8803046e0000)
[19713] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19710] > exit_robust_list(curr=0xffff8802bba2ae00)
  head         = 0x7f87da9a9a20
  &head.list   = 0x7f87da9a9a20
  entry        = 0x7f87da9cd020
  next         = 0x7f87da9a9a20
  futex_offset = -32
  pending      = 0x7f87da9cd020
[19710] > handle_futex_death(uaddr=0x7f87da9cd000 curr=0xffff8802bba2ae00
pi=0x0)
[19713] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cc5 utime=0x0
uaddr2=0x80 val3=0x0)
[19710] < handle_futex_death() return=0x0
[19710] < exit_robust_list() 
[19710] < mm_release() 
[19713] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cc5 abs_time=0x0
bitset=0xffffffff)
[19713] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cc5 flags=0x1
q=0xffff8802bbae7dc8 hb=0xffff8802bbae7d58)
[19713] < futex_wait() return=0x0
[19713] > futex_wait_queue_me(hb=0xffffc90001893fc0 q=0xffff8802bbae7dc8
timeout=0x0)
[19713] > schedule()
[19710]  signal.send SIGCHLD to 19653
[19710] > schedule()
[19653] < schedule() 
[19653] < syscall.wait4() return=0x4cfe
[19653] > pthread_mutex_unlock(mutex=0x7f87da9cd000)
[19653] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9cd000)
[19653] > __pthread_mutex_unlock_full(mutex=0x7f87da9cd000 decr=0x1)
[19653] > syscall.futex(uaddr=0x7f87da9cd000 op=0x1 val=0x1
utime=0x7f87da9a9a10 uaddr2=0x7f87da9cd000 val3=0x4cc5)
[19653] < syscall.futex() return=0x1
[19715] > syscall.set_robust_list(head=0x7f87da9a9a20 len=0x18)
[19715] < syscall.set_robust_list() return=0x0
[19653] < 0x4011a7() return=0x0
[19653] < 0x4011a7() return=0x0
[19704] < schedule() 
[19704] < futex_wait() 
[19653]  signal.send SIGTERM to 19704
[19704] < do_futex() return=0x0
[19704] < syscall.futex() return=0x0
[19653] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19704]  do_exit(code=0xf)
[19653] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19653] < 0x401122() return=0x0
[19704]  exit_mm(tsk=0xffff88030a4d5080)
[19653] < 0x401122() return=0x0
[19704] > mm_release(tsk=0xffff88030a4d5080 mm=0xffff8803046e3e80)
[19653] > syscall.wait4(upid=0x4cf8 stat_addr=0x7ffc78b0308c options=0x0
ru=0x0)
[19653] > schedule()
[19704] > exit_robust_list(curr=0xffff88030a4d5080)
  head         = 0x7f87da9a9a20
  &head.list   = 0x7f87da9a9a20
  entry        = 0x7f87da9cd020
  next         = 0x7f87da9a9a20
  futex_offset = -32
  pending      = 0x7f87da9cd020
[19715] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19704] > handle_futex_death(uaddr=0x7f87da9cd000 curr=0xffff88030a4d5080
pi=0x0)
[19704] < handle_futex_death() return=0x0
[19704] < exit_robust_list() 
[19704] < mm_release() 
[19715] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19715] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cc5 utime=0x0
uaddr2=0x80 val3=0x0)
[19715] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cc5 abs_time=0x0
bitset=0xffffffff)
[19715] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cc5 flags=0x1
q=0xffff88020cb3bdc8 hb=0xffff88020cb3bd58)
[19715] < futex_wait() return=0x0
[19715] > futex_wait_queue_me(hb=0xffffc90001893fc0 q=0xffff88020cb3bdc8
timeout=0x0)
[19715] > schedule()
[19704]  signal.send SIGCHLD to 19653
[19704] > schedule()
[19653] < schedule() 
[19653] < syscall.wait4() return=0x4cf8
[19653] > pthread_mutex_unlock(mutex=0x7f87da9cd000)
[19653] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9cd000)
[19653] > __pthread_mutex_unlock_full(mutex=0x7f87da9cd000 decr=0x1)
[19653] > syscall.futex(uaddr=0x7f87da9cd000 op=0x1 val=0x1
utime=0x7f87da9a9a10 uaddr2=0x7f87da9cd000 val3=0x4cc5)
[19653] < syscall.futex() return=0x1
[19716] > syscall.set_robust_list(head=0x7f87da9a9a20 len=0x18)
[19653] < 0x4011a7() return=0x0
[19716] < syscall.set_robust_list() return=0x0
[19653] < 0x4011a7() return=0x0
[19705] < schedule() 
[19705] < futex_wait() 
[19653]  signal.send SIGTERM to 19705
[19705] < do_futex() return=0x0
[19705] < syscall.futex() return=0x0
[19653] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19705]  do_exit(code=0xf)
[19653] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19705]  exit_mm(tsk=0xffff88030a4d0000)
[19653] < 0x401122() return=0x0
[19705] > mm_release(tsk=0xffff88030a4d0000 mm=0xffff8803046e7080)
[19653] < 0x401122() return=0x0
[19653] > syscall.wait4(upid=0x4cf9 stat_addr=0x7ffc78b0308c options=0x0
ru=0x0)
[19653] > schedule()
[19705] > exit_robust_list(curr=0xffff88030a4d0000)
  head         = 0x7f87da9a9a20
  &head.list   = 0x7f87da9a9a20
  entry        = 0x7f87da9cd020
  next         = 0x7f87da9a9a20
  futex_offset = -32
  pending      = 0x7f87da9cd020
[19705] > handle_futex_death(uaddr=0x7f87da9cd000 curr=0xffff88030a4d0000
pi=0x0)
[19716] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19705] < handle_futex_death() return=0x0
[19705] < exit_robust_list() 
[19705] < mm_release() 
[19716] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19716] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cc5 utime=0x0
uaddr2=0x80 val3=0x0)
[19716] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cc5 abs_time=0x0
bitset=0xffffffff)
[19716] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cc5 flags=0x1
q=0xffff88020cb3fdc8 hb=0xffff88020cb3fd58)
[19716] < futex_wait() return=0x0
[19716] > futex_wait_queue_me(hb=0xffffc90001893fc0 q=0xffff88020cb3fdc8
timeout=0x0)
[19716] > schedule()
[19705]  signal.send SIGCHLD to 19653
[19705] > schedule()
[19653] < schedule() 
[19653] < syscall.wait4() return=0x4cf9
[19653] > pthread_mutex_unlock(mutex=0x7f87da9cd000)
[19653] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9cd000)
[19653] > __pthread_mutex_unlock_full(mutex=0x7f87da9cd000 decr=0x1)
[19653] > syscall.futex(uaddr=0x7f87da9cd000 op=0x1 val=0x1
utime=0x7f87da9a9a10 uaddr2=0x7f87da9cd000 val3=0x4cc5)
[19653] < syscall.futex() return=0x1
[19653] < 0x4011a7() return=0x0
[19717] > syscall.set_robust_list(head=0x7f87da9a9a20 len=0x18)
[19653] < 0x4011a7() return=0x0
[19717] < syscall.set_robust_list() return=0x0
[19711] < schedule() 
[19653]  signal.send SIGTERM to 19714
[19711] < futex_wait() 
[19653] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19711] < do_futex() return=0x0
[19711] < syscall.futex() return=0x0
[19653] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19711] < 0x401122() return=0x0
[19653] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004cff utime=0x0
uaddr2=0x80 val3=0x0)
[19711] < 0x401122() return=0x0
[19653] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004cff abs_time=0x0
bitset=0xffffffff)
[19711] > pthread_mutex_unlock(mutex=0x7f87da9cd000)
[19653] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004cff flags=0x1
q=0xffff8801df113dc8 hb=0xffff8801df113d58)
[19711] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9cd000)
[19653] < futex_wait() return=0x0
[19653] > futex_wait_queue_me(hb=0xffffc90001893fc0 q=0xffff8801df113dc8
timeout=0x0)
[19653] > schedule()
[19711] > __pthread_mutex_unlock_full(mutex=0x7f87da9cd000 decr=0x1)
[19711] > syscall.futex(uaddr=0x7f87da9cd000 op=0x1 val=0x1
utime=0x7f87da9cd020 uaddr2=0x7f87da9cd000 val3=0x0)
[19717] > __pthread_mutex_lock(mutex=0x7f87da9cd000)
[19711] < syscall.futex() return=0x1
[19711] < 0x4011a7() return=0x0
[19712] < schedule() 
[19711] < 0x4011a7() return=0x0
[19712] < futex_wait() 
[19712] < do_futex() return=0x0
[19717] > __pthread_mutex_lock_full(mutex=0x7f87da9cd000)
[19712] < syscall.futex() return=0x0
[19717] < 0x401122() return=0x0
[19712] > syscall.futex(uaddr=0x7f87da9cd000 op=0x0 val=0x80004d05 utime=0x0
uaddr2=0x80 val3=0x0)
[19717] < 0x401122() return=0x0
[19712] > futex_wait(uaddr=0x7f87da9cd000 flags=0x1 val=0x80004d05 abs_time=0x0
bitset=0xffffffff)
[19717] > pthread_mutex_unlock(mutex=0x7f87da9cd000)
[19712] > futex_wait_setup(uaddr=0x7f87da9cd000 val=0x80004d05 flags=0x1
q=0xffff88020b5abdc8 hb=0xffff88020b5abd58)
[19711] > __pthread_mutex_lock(mutex=0x7f87da9d0908)
[19712] < futex_wait() return=0x0
[19717] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9cd000)
[19712] > futex_wait_queue_me(hb=0xffffc90001893fc0 q=0xffff88020b5abdc8
timeout=0x0)
[19712] > schedule()
[19711] < _dl_fini() return=0x0
[19717] > __pthread_mutex_unlock_full(mutex=0x7f87da9cd000 decr=0x1)
[19717] > syscall.futex(uaddr=0x7f87da9cd000 op=0x1 val=0x1
utime=0x7f87da9cd020 uaddr2=0x7f87da9cd000 val3=0x0)
[19711] > pthread_mutex_unlock(mutex=0x7f87da9d0908)
[19717] < syscall.futex() return=0x1
[19711] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9d0908)
[19708] < schedule() 
[19708] < futex_wait() 
[19717] < 0x4011a7() return=0x0
[19708] < do_futex() return=0x0
[19711] < _dl_fini() return=0x0
[19708] < syscall.futex() return=0x0
[19717] < 0x4011a7() return=0x0
[19708] < 0x401122() return=0x0
[19708] < 0x401122() return=0x0
[19708] > pthread_mutex_unlock(mutex=0x7f87da9cd000)
[19708] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9cd000)
[19708] > __pthread_mutex_unlock_full(mutex=0x7f87da9cd000 decr=0x1)
[19717] > __pthread_mutex_lock(mutex=0x7f87da9d0908)
[19708] > syscall.futex(uaddr=0x7f87da9cd000 op=0x1 val=0x1
utime=0x7f87da9cd020 uaddr2=0x7f87da9cd000 val3=0x0)
[19711]  do_exit(code=0x0)
[19717] < _dl_fini() return=0x0
[19708] < syscall.futex() return=0x1
[19708] < 0x4011a7() return=0x0
[19711]  exit_mm(tsk=0xffff8802bba2b980)
[19708] < 0x4011a7() return=0x0
[19711] > mm_release(tsk=0xffff8802bba2b980 mm=0xffff8803046e76c0)
[19717] > pthread_mutex_unlock(mutex=0x7f87da9d0908)
[19711] > exit_robust_list(curr=0xffff8802bba2b980)
  head         = 0x7f87da9a9a20
  &head.list   = 0x7f87da9a9a20
  entry        = 0x7f87da9cd020
  next         = 0x0
  futex_offset = -32
  pending      = 0x0
[19717] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9d0908)
[19711] > handle_futex_death(uaddr=0x7f87da9cd000 curr=0xffff8802bba2b980
pi=0x0)
[19708] > __pthread_mutex_lock(mutex=0x7f87da9d0908)
[19717] < _dl_fini() return=0x0
[19711] < handle_futex_death() return=0x0
[19711] < exit_robust_list() 
[19708] < _dl_fini() return=0x0
[19711] < mm_release() 
[19708] > pthread_mutex_unlock(mutex=0x7f87da9d0908)
[19708] > pthread_mutex_unlock(decr=0x1 mutex=0x7f87da9d0908)
[19717]  do_exit(code=0x0)
[19708] < _dl_fini() return=0x0
[19717]  exit_mm(tsk=0xffff8802bba2dc00)
[19717] > mm_release(tsk=0xffff8802bba2dc00 mm=0xffff8803046e1900)
[19717] > exit_robust_list(curr=0xffff8802bba2dc00)
  head         = 0x7f87da9a9a20
  &head.list   = 0x7f87da9a9a20
  entry        = 0x7f87da9cd020
  next         = 0x0
  futex_offset = -32
  pending      = 0x0
[19708]  do_exit(code=0x0)
[19717] > handle_futex_death(uaddr=0x7f87da9cd000 curr=0xffff8802bba2dc00
pi=0x0)
[19717] < handle_futex_death() return=0x0
[19708]  exit_mm(tsk=0xffff88030a4d7300)
[19717] < exit_robust_list() 
[19717] < mm_release() 
[19708] > mm_release(tsk=0xffff88030a4d7300 mm=0xffff8803046e5780)
[19708] > exit_robust_list(curr=0xffff88030a4d7300)
  head         = 0x7f87da9a9a20
  &head.list   = 0x7f87da9a9a20
  entry        = 0x7f87da9cd020
  next         = 0x0
  futex_offset = -32
  pending      = 0x0
[19708] > handle_futex_death(uaddr=0x7f87da9cd000 curr=0xffff88030a4d7300
pi=0x0)
[19708] < handle_futex_death() return=0x0
[19708] < exit_robust_list() 
[19708] < mm_release() 
[19711]  signal.send SIGCHLD to 19653
[19711] > schedule()
[19717]  signal.send SIGCHLD to 19653
[19717] > schedule()
[19714] < schedule() 
[19714] < futex_wait() 
[19714] < do_futex() return=0x0
[19714] < syscall.futex() return=0x0
[19708]  signal.send SIGCHLD to 19653
[19708] > schedule()
[19714]  do_exit(code=0xf)
[19714]  exit_mm(tsk=0xffff8802bba2a280)
[19714] > mm_release(tsk=0xffff8802bba2a280 mm=0xffff8803046e12c0)
[19714] > exit_robust_list(curr=0xffff8802bba2a280)
  head         = 0x7f87da9a9a20
  &head.list   = 0x7f87da9a9a20
  entry        = 0x7f87da9cd020
  next         = 0x0
  futex_offset = -32
  pending      = 0x7f87da9cd020
[19714] > handle_futex_death(uaddr=0x7f87da9cd000 curr=0xffff8802bba2a280
pi=0x0)
[19714] < handle_futex_death() return=0x0
[19714] < exit_robust_list() 
[19714] < mm_release() 
[19714]  signal.send SIGCHLD to 19653
[19714] > schedule()

  So, I wonder if the below conditions can become true...

1. process A spawns process B and race for a robust mutex
2. process B has robust mutex locked or in process of locking it
3. process B dies
4. while cleaning up from process B death, process C is started
5. during fork, robust_list of A or C may become inconsistent
   because only one process would call pthread_mutex_consistent,
   so, while the mutex would be recovered, the robust list would
   not
6. C also dies with mutex locked causing corruption and dead lock

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]