summaryrefslogtreecommitdiffstats
path: root/runtime/transport/relay_v2.c
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/transport/relay_v2.c')
-rw-r--r--runtime/transport/relay_v2.c29
1 files changed, 21 insertions, 8 deletions
diff --git a/runtime/transport/relay_v2.c b/runtime/transport/relay_v2.c
index 0c8d0955..16b5afa1 100644
--- a/runtime/transport/relay_v2.c
+++ b/runtime/transport/relay_v2.c
@@ -220,18 +220,35 @@ static struct rchan_callbacks __stp_relay_callbacks = {
.remove_buf_file = __stp_relay_remove_buf_file_callback,
};
-static void _stp_transport_data_fs_close(void)
+static void _stp_transport_data_fs_start(void)
+{
+ if (_stp_relay_data.transport_state == STP_TRANSPORT_INITIALIZED) {
+ /* We're initialized. Now start the timer. */
+ __stp_relay_timer_init();
+ _stp_relay_data.transport_state = STP_TRANSPORT_RUNNING;
+ }
+}
+
+static void _stp_transport_data_fs_stop(void)
{
- if (_stp_relay_data.transport_state == STP_TRANSPORT_RUNNING)
+ if (_stp_relay_data.transport_state == STP_TRANSPORT_RUNNING) {
del_timer_sync(&_stp_relay_data.timer);
+ dbug_trans(0, "flushing...\n");
+ _stp_relay_data.transport_state = STP_TRANSPORT_STOPPED;
+ if (_stp_relay_data.rchan)
+ relay_flush(_stp_relay_data.rchan);
+ }
+}
+static void _stp_transport_data_fs_close(void)
+{
+ _stp_transport_data_fs_stop();
if (_stp_relay_data.dropped_file)
debugfs_remove(_stp_relay_data.dropped_file);
if (_stp_relay_data.rchan) {
- relay_flush(_stp_relay_data.rchan);
relay_close(_stp_relay_data.rchan);
+ _stp_relay_data.rchan = NULL;
}
- _stp_relay_data.transport_state = STP_TRANSPORT_STOPPED;
}
static int _stp_transport_data_fs_init(void)
@@ -300,10 +317,6 @@ static int _stp_transport_data_fs_init(void)
dbug_trans(1, "returning 0...\n");
_stp_relay_data.transport_state = STP_TRANSPORT_INITIALIZED;
- /* We're initialized. Now start the timer. */
- __stp_relay_timer_init();
- _stp_relay_data.transport_state = STP_TRANSPORT_RUNNING;
-
return 0;
err: