diff options
author | fche <fche> | 2007-03-12 18:28:47 +0000 |
---|---|---|
committer | fche <fche> | 2007-03-12 18:28:47 +0000 |
commit | b272f21d2a42d44222cfc20f35025c324f6091c4 (patch) | |
tree | d3435c5a9d1576233b4f9a42e785db1908bc6118 /runtime/transport/procfs.c | |
parent | cb43d90b37a7f9a066d56881b87067ef3254d95d (diff) | |
download | systemtap-steved-b272f21d2a42d44222cfc20f35025c324f6091c4.tar.gz systemtap-steved-b272f21d2a42d44222cfc20f35025c324f6091c4.tar.xz systemtap-steved-b272f21d2a42d44222cfc20f35025c324f6091c4.zip |
2007-03-12 Frank Ch. Eigler <fche@elastic.org>
* librelay.c (init_stp): Use /proc/MODULE rather than
/proc/systemtap/MODULE.
2007-03-12 Frank Ch. Eigler <fche@elastic.org>
* procfs.c (_stp_register_procfs): Use /proc/MODULE rather than
/proc/systemtap/MODULE.
Diffstat (limited to 'runtime/transport/procfs.c')
-rw-r--r-- | runtime/transport/procfs.c | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/runtime/transport/procfs.c b/runtime/transport/procfs.c index ca243035..64538ae6 100644 --- a/runtime/transport/procfs.c +++ b/runtime/transport/procfs.c @@ -302,7 +302,6 @@ err: static int _stp_register_procfs (void) { int i; - const char *dirname = "systemtap"; #ifdef STP_RELAYFS int j; char buf[8]; @@ -322,22 +321,13 @@ static int _stp_register_procfs (void) _stp_allocated_net_memory += sizeof(struct _stp_buffer); list_add (p, &_stp_pool_q); } - - /* look for existing /proc/systemtap */ - for (de = proc_root.subdir; de; de = de->next) { - if (my_proc_match (strlen (dirname), dirname, de)) { - _stp_proc_root = de; - break; - } - } - - /* create /proc/systemtap if it doesn't exist */ - if (_stp_proc_root == NULL) { - _stp_proc_root = proc_mkdir (dirname, NULL); - if (_stp_proc_root == NULL) - goto err0; - } + /* Formerly, we allocated /proc/systemtap, but unfortunately + that's racy with multiple concurrent probes. So now we set + _stp_proc_root to proc_root. This way, /proc/stap_XXXX + rather than /proc/systemtap/stap_XXXX will be the directory + under which cmd/ etc. will show up. */ + _stp_proc_root = NULL; /* now create /proc/systemtap/module_name */ _stp_proc_mod = proc_mkdir (THIS_MODULE->name, _stp_proc_root); @@ -380,7 +370,7 @@ err1: } #endif - remove_proc_entry (THIS_MODULE->name, _stp_proc_root); + remove_proc_entry (THIS_MODULE->name, _stp_proc_root); err0: list_for_each_safe(p, tmp, &_stp_pool_q) { list_del(p); @@ -409,7 +399,7 @@ static void _stp_unregister_procfs (void) } #endif remove_proc_entry ("cmd", _stp_proc_mod); - remove_proc_entry (THIS_MODULE->name, _stp_proc_root); /* XXX: race condition */ + remove_proc_entry (THIS_MODULE->name, _stp_proc_root); /* free memory pools */ list_for_each_safe(p, tmp, &_stp_pool_q) { |