Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Sep 2008 06:31:42 +0200
From:      David Naylor <naylor.b.david@gmail.com>
To:        freebsd-current@freebsd.org
Subject:   FreeBSD deadlock (with fork?)
Message-ID:  <200809180631.47071.naylor.b.david@gmail.com>

next in thread | raw e-mail | index | archive | help
--nextPart1363582.xnixl2Qouk
Content-Type: text/plain;
  charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Hi,

I have a program that spawns a lot of subprocesses (with pipes open) from=20
multiple threads.  The problem is the program often deadlocks, but not=20
consistently.  Sometimes the program can run over 5 times to competition=20
without incidence and yet othertimes it locks within a few seconds. =20

However if I limit the thread count to 1 the problem does not appear to be=
=20
present. =20

Here are the logs from gdb:
(gdb) info thread
  5 Thread 7021c0 (LWP 100203)  0x00000008009a2e8c in _umtx_op_err ()
    at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37
  4 Thread a28480 (LWP 100174)  0x00000008009a2e8c in _umtx_op_err ()
    at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37
  3 Thread a61d80 (LWP 100175)  0x00000008009a2e8c in _umtx_op_err ()
    at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37
  2 Thread a61bc0 (LWP 100176)  0x00000008009a2e8c in _umtx_op_err ()
    at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37
* 1 Thread a61840 (LWP 100177)  0x00000008009a2e8c in _umtx_op_err ()
    at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37


(gdb) bt
#0  0x00000008009a2e8c in _umtx_op_err ()=20
at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37
#1  0x00000008009a1331 in cond_wait_common (cond=3DVariable "cond" is not=20
available.
) at /usr/src/lib/libthr/thread/thr_cond.c:204
#2  0x00000000004c0573 in PyThread_acquire_lock (lock=3D0x70a760, waitflag=
=3D1) at=20
thread_pthread.h:452
#3  0x00000000004c38b0 in lock_PyThread_acquire_lock (self=3D0x83f258,=20
args=3DVariable "args" is not available.
) at ./Modules/threadmodule.c:46
#4  0x00000000004939e3 in PyEval_EvalFrameEx (f=3D0xa53920,=20
throwflag=3DVariable "throwflag" is not available.
) at Python/ceval.c:3679
#5  0x00000000004939a8 in PyEval_EvalFrameEx (f=3D0xb57420,=20
throwflag=3DVariable "throwflag" is not available.
) at Python/ceval.c:3765
#6  0x0000000000494ac1 in PyEval_EvalCodeEx (co=3D0x9aab70,=20
globals=3DVariable "globals" is not available.
) at Python/ceval.c:2942
#7  0x00000000004eb6bc in function_call (func=3D0x9d8938, arg=3D0x9d9990,=20
kw=3D0xa24da0)
    at Objects/funcobject.c:524
#8  0x0000000000417add in PyObject_Call (func=3D0x9d8938, arg=3D0x9d9990,=20
kw=3D0xa24da0)
    at Objects/abstract.c:2487
#9  0x000000000048f730 in PyEval_EvalFrameEx (f=3D0xb48e20,=20
throwflag=3DVariable "throwflag" is not available.
) at Python/ceval.c:3978
#10 0x00000000004939a8 in PyEval_EvalFrameEx (f=3D0xb57720,=20
throwflag=3DVariable "throwflag" is not available.
) at Python/ceval.c:3765
#11 0x00000000004939a8 in PyEval_EvalFrameEx (f=3D0xb49020,=20
throwflag=3DVariable "throwflag" is not available.
) at Python/ceval.c:3765
#12 0x0000000000494ac1 in PyEval_EvalCodeEx (co=3D0x947cd8,=20
globals=3DVariable "globals" is not available.
) at Python/ceval.c:2942
#13 0x00000000004eb5bd in function_call (func=3D0x9a5320, arg=3D0x9d9950, k=
w=3D0x0)=20
at Objects/funcobject.c:524
#14 0x0000000000417add in PyObject_Call (func=3D0x9a5320, arg=3D0x9d9950, k=
w=3D0x0)=20
at Objects/abstract.c:2487
#15 0x000000000041f12f in instancemethod_call (func=3D0x9a5320, arg=3D0x9d9=
950,=20
kw=3D0x0)
    at Objects/classobject.c:2558
#16 0x0000000000417add in PyObject_Call (func=3D0x93b410, arg=3D0x718050, k=
w=3D0x0)=20
at Objects/abstract.c:2487
#17 0x000000000048d4c6 in PyEval_CallObjectWithKeywords (func=3D0x93b410,=20
arg=3D0x718050, kw=3D0x0)
    at Python/ceval.c:3548
#18 0x00000000004c3cbd in t_bootstrap (boot_raw=3D0x70ae60)=20
at ./Modules/threadmodule.c:425
#19 0x000000080099ac11 in thread_start (curthread=3D0xa61840)=20
at /usr/src/lib/libthr/thread/thr_create.c:288
#20 0x0000000000000000 in ?? ()
Error accessing memory address 0x7fffff5fc000: Bad address.


(gdb) thr 2
[Switching to thread 2 (Thread a61bc0 (LWP 100176))]#0  0x00000008009a2e8c =
in=20
_umtx_op_err ()
    at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37
37      RSYSCALL_ERR(_umtx_op)
(gdb) bt
#0  0x00000008009a2e8c in _umtx_op_err ()=20
at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37
#1  0x00000008009a1331 in cond_wait_common (cond=3DVariable "cond" is not=20
available.
) at /usr/src/lib/libthr/thread/thr_cond.c:204
#2  0x00000000004c0573 in PyThread_acquire_lock (lock=3D0x70a600, waitflag=
=3D1) at=20
thread_pthread.h:452
#3  0x00000000004c38b0 in lock_PyThread_acquire_lock (self=3D0x83f168,=20
args=3DVariable "args" is not available.
) at ./Modules/threadmodule.c:46
#4  0x00000000004939e3 in PyEval_EvalFrameEx (f=3D0xb56520,=20
throwflag=3DVariable "throwflag" is not available.
) at Python/ceval.c:3679
#5  0x0000000000494ac1 in PyEval_EvalCodeEx (co=3D0x8d5dc8,=20
globals=3DVariable "globals" is not available.
) at Python/ceval.c:2942
#6  0x0000000000492c88 in PyEval_EvalFrameEx (f=3D0xb2de20,=20
throwflag=3DVariable "throwflag" is not available.
) at Python/ceval.c:3775
#7  0x0000000000494ac1 in PyEval_EvalCodeEx (co=3D0x8d5288,=20
globals=3DVariable "globals" is not available.
) at Python/ceval.c:2942
#8  0x00000000004eb5bd in function_call (func=3D0x9a8b18, arg=3D0xc524d0, k=
w=3D0x0)=20
at Objects/funcobject.c:524
#9  0x0000000000417add in PyObject_Call (func=3D0x9a8b18, arg=3D0xc524d0, k=
w=3D0x0)=20
at Objects/abstract.c:2487
#10 0x000000000041f12f in instancemethod_call (func=3D0x9a8b18, arg=3D0xc52=
4d0,=20
kw=3D0x0)
    at Objects/classobject.c:2558
#11 0x0000000000417add in PyObject_Call (func=3D0x93b370, arg=3D0x10331d0, =
kw=3D0x0)=20
at Objects/abstract.c:2487
#12 0x0000000000464158 in slot_tp_init (self=3DVariable "self" is not avail=
able.
) at Objects/typeobject.c:5532
#13 0x0000000000461561 in type_call (type=3D0x7d9420, args=3D0x10331d0, kwd=
s=3D0x0)=20
at Objects/typeobject.c:700
#14 0x0000000000417add in PyObject_Call (func=3D0x7d9420, arg=3D0x10331d0, =
kw=3D0x0)=20
at Objects/abstract.c:2487
#15 0x00000000004906f9 in PyEval_EvalFrameEx (f=3D0xb3a120,=20
throwflag=3DVariable "throwflag" is not available.
) at Python/ceval.c:3890
#16 0x0000000000494ac1 in PyEval_EvalCodeEx (co=3D0x8d5eb8,=20
globals=3DVariable "globals" is not available.
) at Python/ceval.c:2942
#17 0x0000000000492c88 in PyEval_EvalFrameEx (f=3D0xa47a20,=20
throwflag=3DVariable "throwflag" is not available.
) at Python/ceval.c:3775
#18 0x0000000000494ac1 in PyEval_EvalCodeEx (co=3D0x8d5cd8,=20
globals=3DVariable "globals" is not available.
) at Python/ceval.c:2942
#19 0x0000000000492c88 in PyEval_EvalFrameEx (f=3D0xb3a420,=20
throwflag=3DVariable "throwflag" is not available.
) at Python/ceval.c:3775
#20 0x0000000000494ac1 in PyEval_EvalCodeEx (co=3D0x9aabe8,=20
globals=3DVariable "globals" is not available.
) at Python/ceval.c:2942
#21 0x0000000000492c88 in PyEval_EvalFrameEx (f=3D0xb3a720,=20
throwflag=3DVariable "throwflag" is not available.
) at Python/ceval.c:3775
#22 0x0000000000494ac1 in PyEval_EvalCodeEx (co=3D0x9aab70,=20
globals=3DVariable "globals" is not available.
) at Python/ceval.c:2942
#23 0x00000000004eb6bc in function_call (func=3D0x9d8938, arg=3D0x9d98d0,=20
kw=3D0xa5a660)
    at Objects/funcobject.c:524
#24 0x0000000000417add in PyObject_Call (func=3D0x9d8938, arg=3D0x9d98d0,=20
kw=3D0xa5a660)
    at Objects/abstract.c:2487
#25 0x000000000048f730 in PyEval_EvalFrameEx (f=3D0xb2e020,=20
throwflag=3DVariable "throwflag" is not available.
) at Python/ceval.c:3978
=2D--Type <return> to continue, or q <return> to quit---
#26 0x00000000004939a8 in PyEval_EvalFrameEx (f=3D0xb3aa20,=20
throwflag=3DVariable "throwflag" is not available.
) at Python/ceval.c:3765
#27 0x00000000004939a8 in PyEval_EvalFrameEx (f=3D0xb2e220,=20
throwflag=3DVariable "throwflag" is not available.
) at Python/ceval.c:3765
#28 0x0000000000494ac1 in PyEval_EvalCodeEx (co=3D0x947cd8,=20
globals=3DVariable "globals" is not available.
) at Python/ceval.c:2942
#29 0x00000000004eb5bd in function_call (func=3D0x9a5320, arg=3D0x9d9890, k=
w=3D0x0)=20
at Objects/funcobject.c:524
#30 0x0000000000417add in PyObject_Call (func=3D0x9a5320, arg=3D0x9d9890, k=
w=3D0x0)=20
at Objects/abstract.c:2487
#31 0x000000000041f12f in instancemethod_call (func=3D0x9a5320, arg=3D0x9d9=
890,=20
kw=3D0x0)
    at Objects/classobject.c:2558
#32 0x0000000000417add in PyObject_Call (func=3D0x93b320, arg=3D0x718050, k=
w=3D0x0)=20
at Objects/abstract.c:2487
#33 0x000000000048d4c6 in PyEval_CallObjectWithKeywords (func=3D0x93b320,=20
arg=3D0x718050, kw=3D0x0)
    at Python/ceval.c:3548
#34 0x00000000004c3cbd in t_bootstrap (boot_raw=3D0x70aee0)=20
at ./Modules/threadmodule.c:425
#35 0x000000080099ac11 in thread_start (curthread=3D0xa61bc0)=20
at /usr/src/lib/libthr/thread/thr_create.c:288
#36 0x0000000000000000 in ?? ()
Error accessing memory address 0x7fffff7fd000: Bad address.

Apologies about the long backtraces [and thus the long message]. =20

Thanks

David

--nextPart1363582.xnixl2Qouk
Content-Type: application/pgp-signature; name=signature.asc 
Content-Description: This is a digitally signed message part.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.4 (FreeBSD)

iD8DBQBI0dmzUaaFgP9pFrIRAtZLAJ4u93H8lRRBnKFoovdY0xwKkJlAqQCdHCar
sKPisc2z5tIDPocnk1hVtug=
=lED7
-----END PGP SIGNATURE-----

--nextPart1363582.xnixl2Qouk--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200809180631.47071.naylor.b.david>