summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--runtime/transport/control.c3
-rw-r--r--runtime/transport/utt.c4
-rw-r--r--runtime/transport/utt.h2
3 files changed, 8 insertions, 1 deletions
diff --git a/runtime/transport/control.c b/runtime/transport/control.c
index 1f7f70bd..5242af49 100644
--- a/runtime/transport/control.c
+++ b/runtime/transport/control.c
@@ -239,6 +239,7 @@ static int _stp_ctl_open_cmd (struct inode *inode, struct file *file)
_stp_ctl_opens++;
_stp_pid = current->pid;
+ utt_overwrite_flag = 0;
return 0;
}
@@ -247,6 +248,8 @@ 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;
return 0;
}
diff --git a/runtime/transport/utt.c b/runtime/transport/utt.c
index 1ca59592..0871266a 100644
--- a/runtime/transport/utt.c
+++ b/runtime/transport/utt.c
@@ -29,6 +29,8 @@
#include <linux/relay.h>
#include "utt.h"
+int utt_overwrite_flag = 0;
+
static void utt_remove_root(struct utt_trace *utt)
{
if (utt->utt_tree_root) {
@@ -129,7 +131,7 @@ static int utt_subbuf_start_callback(struct rchan_buf *buf, void *subbuf,
{
struct utt_trace *utt;
- if (!relay_buf_full(buf))
+ if (utt_overwrite_flag || !relay_buf_full(buf))
return 1;
utt = buf->chan->private_data;
diff --git a/runtime/transport/utt.h b/runtime/transport/utt.h
index b2c9fa9f..00da0f7e 100644
--- a/runtime/transport/utt.h
+++ b/runtime/transport/utt.h
@@ -39,4 +39,6 @@ extern int utt_trace_startstop(struct utt_trace *utt, int start,
extern void utt_trace_cleanup(struct utt_trace *utt);
extern int utt_trace_remove(struct utt_trace *utt);
+extern int utt_overwrite_flag;
+
#endif