summaryrefslogtreecommitdiffstats
path: root/runtime/transport/relayfs.c
diff options
context:
space:
mode:
authorDavid Smith <dsmith@redhat.com>2009-06-03 13:04:54 -0500
committerDavid Smith <dsmith@redhat.com>2009-06-03 13:04:54 -0500
commit01adca5bca8d61e3fdf09017496deec8859fe12d (patch)
treed256a8074b58fbf5607b1b594fc9ea8b7daa27ed /runtime/transport/relayfs.c
parenta655ff03c59722c229a40909d0de9e3dfe63483e (diff)
downloadsystemtap-steved-01adca5bca8d61e3fdf09017496deec8859fe12d.tar.gz
systemtap-steved-01adca5bca8d61e3fdf09017496deec8859fe12d.tar.xz
systemtap-steved-01adca5bca8d61e3fdf09017496deec8859fe12d.zip
Fixed STP_TRANSPORT_VERSION 1 behavior.
* runtime/transport/control.c (_stp_ctl_write_dbug): Added support for more messages. * runtime/transport/relay_v2.c (_stp_transport_data_fs_start): New function. (_stp_transport_data_fs_stop): Ditto. (_stp_transport_data_fs_close): Moved some functionality into _stp_transport_data_fs_stop() and calls _stp_transport_data_fs_stop() also. (_stp_transport_data_fs_init): Moved some functionality into _stp_transport_data_fs_start() and calls _stp_transport_data_fs_start() also. * runtime/transport/relayfs.c (_stp_transport_data_fs_start): New function. (_stp_transport_data_fs_stop): Ditto. (_stp_transport_data_fs_close): Moved some functionality into _stp_transport_data_fs_stop() and calls _stp_transport_data_fs_stop() also. (_stp_transport_data_fs_init): Moved some functionality into _stp_transport_data_fs_start() and calls _stp_transport_data_fs_start() also. * runtime/transport/ring_buffer.c (_stp_transport_data_fs_start): New empty function. (_stp_transport_data_fs_stop): Ditto. * runtime/transport/transport.h: Added _stp_transport_data_fs_start() and _stp_transport_data_fs_stop() prototypes. * runtime/transport/transport.c (_stp_cleanup_and_exit): Calls _stp_transport_data_fs_stop(). (_stp_transport_close): Calls _stp_transport_fs_close() earlier. (_stp_transport_init): Calls _stp_transport_data_fs_start().
Diffstat (limited to 'runtime/transport/relayfs.c')
-rw-r--r--runtime/transport/relayfs.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/runtime/transport/relayfs.c b/runtime/transport/relayfs.c
index dac6db1d..191b932f 100644
--- a/runtime/transport/relayfs.c
+++ b/runtime/transport/relayfs.c
@@ -75,14 +75,29 @@ static struct rchan_callbacks stp_rchan_callbacks =
.buf_full = __stp_relay_buf_full_callback,
};
+static void _stp_transport_data_fs_start(void)
+{
+ if (_stp_relay_data.transport_state == STP_TRANSPORT_INITIALIZED)
+ _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) {
+ _stp_relay_data.transport_state = STP_TRANSPORT_STOPPED;
+ _stp_relay_data.flushing = 1;
+ 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.rchan) {
- _stp_relay_data.flushing = 1;
- 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)
@@ -111,9 +126,8 @@ static int _stp_transport_data_fs_init(void)
= _stp_gid;
}
- /* We're off and running. */
- smp_mb();
- _stp_relay_data.transport_state = STP_TRANSPORT_RUNNING;
+ /* We're initialized. */
+ _stp_relay_data.transport_state = STP_TRANSPORT_INITIALIZED;
return rc;
err: