http://defect.opensolaris.org/bz/show_bug.cgi?id=14344
amaguire <alan.maguire at sun.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ACCEPTED |CAUSEKNOWN
--- Comment #1 from amaguire <alan.maguire at sun.com> 2010-02-03 14:07:52 UTC
---
In these deadlock cases, the event queue has 31 events pending. On x86:
> ::uu_list_pool
ADDR NAME COMPARE FLAGS
080aaf08 SUNW,libscf_datael c28b8a04 D
080aae08 SUNW,libscf_iter c28b8a38 D
080aad08 SUNW,libscf_transaction_entity c28b89bc D
080aac08 object_list_pool 080699f0 D
080aab08 event_queue_pool 0805d2fc D
>
> 080aab08::walk uu_list|::walk uu_list_node ! wc
31 31 248
On sparc:
> ::uu_list_pool
ADDR NAME COMPARE FLAGS
00087f08 SUNW,libscf_datael ff0a8b84 D
00087e08 SUNW,libscf_iter ff0a8bc0 D
00087d08 SUNW,libscf_transaction_entity ff0a8b4c D
00087c08 object_list_pool 00028a68 D
00087b08 event_queue_pool 0001c780 D
> 00087b08::walk uu_list|::walk uu_list_node ! wc
31 31 186
>
This suggests that deadlock occurs in the event handler thread as follows. An
event we are handling requires us to enqueue a new event, but since the event
queue is full (31 events + the current event we're processing), it has nowhere
to go. The event handling thread is blocked trying to enqueue, and since it is
responsible for draining the event queue via nwamd_event_fini() calls, we're
stuck. I can't think of an immediate way round this (we can't free the current
event until we've finished handling it and sent any externally-relevant data
via nwamd_event_send()) using the preallocated event approach.
--
Configure bugmail: http://defect.opensolaris.org/bz/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.