summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Jakma <paul.jakma@sun.com>2007-10-22 15:53:17 +0000
committerPaul Jakma <paul.jakma@sun.com>2007-10-22 15:53:17 +0000
commita56ef88348be9f019631d6bc92801aae647be05b (patch)
tree12051517321d29fda1116654af59fab501c5b217
parent9c1deac7d6f68b14a130ad99d8a7e3329f570f11 (diff)
downloadquagga-a56ef88348be9f019631d6bc92801aae647be05b.tar.bz2
quagga-a56ef88348be9f019631d6bc92801aae647be05b.tar.xz
[snmp-smux] Fix problems if 'smux peer ...' is issued multiple times
2007-10-22 Lorenzo Colitti <lorenzo@colitti.com> * smux.c: (smux_stop) Avoid cancelling a defunct thread pointer (smux_start) Stop smux before trying to start it, possibly again.
-rw-r--r--lib/ChangeLog5
-rw-r--r--lib/smux.c14
2 files changed, 17 insertions, 2 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 887c7854..0725f795 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,8 @@
+2007-10-22 Lorenzo Colitti <lorenzo@colitti.com>
+
+ * smux.c: (smux_stop) Avoid cancelling a defunct thread pointer
+ (smux_start) Stop smux before trying to start it, possibly again.
+
2007-10-04 Denis Ovsienko
* pid_output.c: (pid_output) stop using LOGFILE_MASK
diff --git a/lib/smux.c b/lib/smux.c
index 8218c440..6285c94d 100644
--- a/lib/smux.c
+++ b/lib/smux.c
@@ -1228,9 +1228,16 @@ void
smux_stop ()
{
if (smux_read_thread)
- thread_cancel (smux_read_thread);
+ {
+ thread_cancel (smux_read_thread);
+ smux_read_thread = NULL;
+ }
+
if (smux_connect_thread)
- thread_cancel (smux_connect_thread);
+ {
+ thread_cancel (smux_connect_thread);
+ smux_connect_thread = NULL;
+ }
if (smux_sock >= 0)
{
@@ -1534,6 +1541,9 @@ smux_init (struct thread_master *tm)
void
smux_start(void)
{
+ /* Close any existing connections. */
+ smux_stop();
+
/* Schedule first connection. */
smux_event (SMUX_SCHEDULE, 0);
}