summaryrefslogtreecommitdiffstats
path: root/runtime/transport/control.c
diff options
context:
space:
mode:
authorhunt <hunt>2007-11-01 19:19:33 +0000
committerhunt <hunt>2007-11-01 19:19:33 +0000
commit68e81635a3fd6d11f6e605995c72801c66305171 (patch)
tree3871759d4412aedebf85975ccfcedfe712613559 /runtime/transport/control.c
parentd47936fc8f3245d9f14797eb7bf2e876b3c37c99 (diff)
downloadsystemtap-steved-68e81635a3fd6d11f6e605995c72801c66305171.tar.gz
systemtap-steved-68e81635a3fd6d11f6e605995c72801c66305171.tar.xz
systemtap-steved-68e81635a3fd6d11f6e605995c72801c66305171.zip
2007-11-01 Martin Hunt <hunt@redhat.com>
* procfs.c, control.c, transport.c: Recognize when stapio is detached and disable delayed work. Enable when attached. Cleanup code to destroy workqueue on exit.
Diffstat (limited to 'runtime/transport/control.c')
-rw-r--r--runtime/transport/control.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/runtime/transport/control.c b/runtime/transport/control.c
index ae731659..7846572a 100644
--- a/runtime/transport/control.c
+++ b/runtime/transport/control.c
@@ -261,6 +261,8 @@ static int _stp_ctl_send (int type, void *data, int len)
} else {
while ((err = _stp_ctl_write(type, data, len)) < 0 && trylimit--)
msleep (5);
+ if (err > 0)
+ wake_up_interruptible(&_stp_ctl_wq);
}
kbug("returning %d\n", err);
return err;
@@ -368,26 +370,19 @@ static int _stp_sym_close_cmd (struct inode *inode, struct file *file)
return 0;
}
-static int _stp_ctl_opens = 0;
static int _stp_ctl_open_cmd (struct inode *inode, struct file *file)
{
- /* only allow one reader */
- if (_stp_ctl_opens)
+ if (_stp_attached)
return -1;
- _stp_ctl_opens++;
- _stp_pid = current->pid;
- utt_overwrite_flag = 0;
+ _stp_attach();
return 0;
}
static int _stp_ctl_close_cmd (struct inode *inode, struct file *file)
{
- if (_stp_ctl_opens)
- _stp_ctl_opens--;
- _stp_pid = 0;
- if (!_stp_exit_flag)
- utt_overwrite_flag = 1;
+ if (_stp_attached)
+ _stp_detach();
return 0;
}