BUG#: 8753
authorkamal.locahana <kamal.locahana>
Fri, 9 Apr 2010 07:53:36 +0000 (07:53 +0000)
committerkamal.locahana <kamal.locahana>
Fri, 9 Apr 2010 07:53:36 +0000 (07:53 +0000)
TITLE: SLP unregister and update anamolies

DESCRIPTION:

src/slp/slp_agent/peg_slp_agent.cpp
src/slp/slp_agent/peg_slp_agent.h

index bdf9d674ec330ef26b6d6705830de444d07c0535..5cc9a3c20cffa90f93cd083c89fa262c9b71f306 100644 (file)
@@ -450,14 +450,14 @@ void slp_service_agent::update_reg_count()
 }
 #endif
 
-void slp_service_agent::unregister()
+void slp_service_agent::unregister(Boolean stopListener)
 {
     if (_initialized.get() == 0 )
     {
         throw UninitializedObjectException();
     }
 
-    if (_should_listen.get())
+    if (stopListener && _should_listen.get())
     {
         _should_listen = 0;
 #ifdef PEGASUS_SLP_REG_TIMEOUT
@@ -483,7 +483,7 @@ void slp_service_agent::unregister()
                 &callbackErr);
             SLPClose(slp_handle);
         }
-#elif PEGASUS_SLP_REG_TIMEOUT
+#else
         // Unregister with external SLP SA.
         sa_reg_params *p;
 
@@ -666,6 +666,7 @@ PEGASUS_THREAD_CDECL slp_service_agent::service_listener(void *parm)
             // semaphore is signalled means we have to update registrations.
             else if (agent->_should_listen.get())
             {
+                agent->unregister(false);
                 agent->update_registrations();
             }
         }
@@ -677,6 +678,7 @@ PEGASUS_THREAD_CDECL slp_service_agent::service_listener(void *parm)
         _LSLP_SLEEP(1);
         if (agent->_update_reg_count.get() && agent->_should_listen.get())
         {
+            agent->unregister(false);
             agent->update_registrations();
             agent->_update_reg_count--;
         }
index 9d537bbf0096da42abbe339f5f1ff92c542e5e7a..f4b9e2875eb75b5d51f8d68179c64f55264ec741 100644 (file)
@@ -138,7 +138,7 @@ public:
     static ThreadReturnType PEGASUS_THREAD_CDECL service_listener(void *);
 
     void start_listener();
-    void unregister();
+    void unregister(Boolean stopListener = true);
 
     void set_registration_callback(void (*ptr)());