Commit 83014699 authored by stephane eranian's avatar stephane eranian Committed by Tony Luck

[IA64] perfmon: fix async exit bug

Move the cleanup of the async queue to the close callback from the flush
callback. This avoids losing asynchronous overflow notifications when
the file descriptor is shared by multiple processes and one terminates.
Signed-off-by: default avatarStephane Eranian <eranian@gmail.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent 28ffb5d3
...@@ -1864,11 +1864,6 @@ pfm_flush(struct file *filp, fl_owner_t id) ...@@ -1864,11 +1864,6 @@ pfm_flush(struct file *filp, fl_owner_t id)
* invoked after, it will find an empty queue and no * invoked after, it will find an empty queue and no
* signal will be sent. In both case, we are safe * signal will be sent. In both case, we are safe
*/ */
if (filp->f_flags & FASYNC) {
DPRINT(("cleaning up async_queue=%p\n", ctx->ctx_async_queue));
pfm_do_fasync (-1, filp, ctx, 0);
}
PROTECT_CTX(ctx, flags); PROTECT_CTX(ctx, flags);
state = ctx->ctx_state; state = ctx->ctx_state;
...@@ -1999,6 +1994,11 @@ pfm_close(struct inode *inode, struct file *filp) ...@@ -1999,6 +1994,11 @@ pfm_close(struct inode *inode, struct file *filp)
return -EBADF; return -EBADF;
} }
if (filp->f_flags & FASYNC) {
DPRINT(("cleaning up async_queue=%p\n", ctx->ctx_async_queue));
pfm_do_fasync(-1, filp, ctx, 0);
}
PROTECT_CTX(ctx, flags); PROTECT_CTX(ctx, flags);
state = ctx->ctx_state; state = ctx->ctx_state;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment