Ticket #61 (closed bug: fixed)
xexec: methods calls of object that called hook within hook cause deadlock
| Reported by: | niam | Owned by: | niam |
|---|---|---|---|
| Priority: | high | Milestone: | 0.13.0 |
| Component: | Version: | trunk | |
| Severity: | major | Keywords: | |
| Cc: |
Description
If inside hook call a method of callee object and method is protected with pc::sync::protector deadlock will occur.
For example:
void
hook(xexecCollectedData *odata,
short int type,
void *udata)
{
xexecIoChannelCollectedData *st = (xexecIoChannelCollectedData *)odata;
if (st->operType == IO_OPERATION_WRITE)
{
stdio *io = dynamic_cast<stdio *>(st->executor);
io->outSize = 100;
io->writeStream("\nhook\n"); /* >DEADLOCK< */
}
}
Change History
comment:2 Changed 2 years ago by niam
- Status changed from assigned to closed
- Resolution set to fixed
(In [3d282b801f8985d51208951aaa1628d21267819e]) {issue #61[fixed]} pc::sync::(thread|process)::section could be acquired recursively by the current thread/process
Note: See
TracTickets for help on using
tickets.

It's possible to add flag to indicate that function call is under hook and do not try to protect.