Fixed bug in Cyberlink library that prevented the HTTPMUSocket thread destruction
(some times Cyber.ThreadCore does not stop properly )
Added names to cyberlink threads
added code to stop subscriber and notifier thread

git-svn-id: https://svn.apache.org/repos/asf/incubator/felix/trunk@479237 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java b/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java
index 956f3b6..bd7c441 100644
--- a/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java
+++ b/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java
@@ -82,7 +82,7 @@
 		this.producerDeviceToExport = new RootDeviceListener(queue);
 		producerDeviceToExport.activate();
 		consumerDeviceToExport = new ThreadExporter(queue);
-		new Thread(consumerDeviceToExport, "Exporter").start();
+		new Thread(consumerDeviceToExport, "upnp.basedriver.Exporter").start();
 
 		//Setting up Base Driver Importer
 		this.notifierQueue = new NotifierQueue();
@@ -129,6 +129,8 @@
 
 		//Setting up Base Driver Importer
 		ctrl.stop();
+		subScriber.close();
+		notifier.close();
 		Activator.logger.close();
 		Activator.logger=null;
 		Activator.bc = null;
diff --git a/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/NotifierQueue.java b/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/NotifierQueue.java
index 166cba5..f8e6228 100644
--- a/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/NotifierQueue.java
+++ b/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/NotifierQueue.java
@@ -26,6 +26,7 @@
 */

 public class NotifierQueue {

 	private Vector queue;

+	private boolean running = true;

 	

 	public NotifierQueue(){

 		queue=new Vector();

@@ -40,16 +41,22 @@
 	}

 	

 	public synchronized Object dequeue(){

-		while(queue.size()==0){

+		while(queue.size()==0 && running){

 			try {

 				wait();

 			} catch (InterruptedException e) {

-				// TODO Auto-generated catch block

 				e.printStackTrace();

 			}

 		}

-		

-		return queue.remove(0);

+		if (running)

+			return queue.remove(0);

+		else

+			return null;

+	}

+

+	public synchronized void close() {

+		running  = false;

+		notify();		

 	}

 

 }

diff --git a/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SubscriptionQueue.java b/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SubscriptionQueue.java
index 082b10a..f4bc03d 100644
--- a/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SubscriptionQueue.java
+++ b/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SubscriptionQueue.java
@@ -28,6 +28,7 @@
 */

 public class SubscriptionQueue {

 	private Vector queue;

+	private boolean running = true;

 	

 	public SubscriptionQueue(){

 		queue=new Vector();

@@ -39,7 +40,7 @@
 		}

 	}

 	public synchronized Object dequeue(){

-		while(queue.size()==0){

+		while(queue.size()==0 && running){

 			try {

 				wait();

 			} catch (InterruptedException e) {

@@ -47,7 +48,15 @@
 				e.printStackTrace();

 			}

 		}

-		return queue.remove(0); 

+		if (running)

+			return queue.remove(0); 

+		else		

+			return null;

+	}

+	

+	public synchronized void close() {

+		running  = false;

+		notify();		

 	}	

 	

 

diff --git a/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Notifier.java b/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Notifier.java
index 0b954d9..6235082 100644
--- a/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Notifier.java
+++ b/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Notifier.java
@@ -33,17 +33,19 @@
 

 	private NotifierQueue notifierQueue;

 	private Monitor monitor;

+	private boolean running = true;

 

     public Notifier(NotifierQueue notifierQueue,Monitor monitor) {

-		super("Notifier");

+		super("upnp.basedriver.Notifier");

 		this.notifierQueue = notifierQueue;

 		this.monitor = monitor;

 		

 	}

 

 	public void run() {

-		while (true) {

+		while (running) {

             StateChanged msg = (StateChanged) notifierQueue.dequeue();

+            if (running) {

 				StateVarsToNotify vars = null;

 				if (msg.getSeq() == 0) {

 					vars = new StateVarsToNotify(msg);

@@ -51,6 +53,12 @@
 				} else {

 					monitor.updateStateVars(msg.getSid(),msg.getDictionary());

 				}

+            }

 		}

 	}

+

+	public void close() {

+		running  = false;

+		notifierQueue.close();

+	}

 }
\ No newline at end of file
diff --git a/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/SubScriber.java b/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/SubScriber.java
index 447e699..e428499 100644
--- a/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/SubScriber.java
+++ b/upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/SubScriber.java
@@ -40,66 +40,53 @@
 

 	private MyCtrlPoint ctrl;

 	private SubscriptionQueue subQueue;

-    private boolean stopCond = true;

-	//##renew private SidRenewer sidRenew;

+    private boolean running = true;

 	private Monitor monitor;

 

     

     public SubScriber(MyCtrlPoint ctrl, SubscriptionQueue subQueue, Monitor monitor) {

-		super("Subscriber");

+		super("upnp.basedriver.Subscriber");

 		this.ctrl = ctrl;

 		this.subQueue = subQueue;

 		this.monitor=monitor;

-		//##renew this.sidRenew = new SidRenewer();

 		

 	}

 

 	public void run() {

-		while (stopCond) {

+		while (running) {

 			Object msg = subQueue.dequeue();

-			if (msg instanceof FirstMessage) {

-				FirstMessage firstmsg = (FirstMessage) msg;

-				Service service = firstmsg.getService();

-				if (!service.isSubscribed()) {//is not subscribe

-					boolean ok = ctrl.subscribe(service,120000);

-					String sid = "";

-					if (ok) {//subcribe ok

-                        

-						sid = service.getSID();

-						firstmsg.setSid(sid);

-                        // ########### Renew ########################

-//                      ##renew Renewer renewer = new Renewer((service.getTimeout()),

-//                      ##renew 		sid, service, ctrl,	subQueue);

-//                      ##renew sidRenew.put(sid, renewer);

-//                      ##renew renewer.start();

-                        // ########### Renew ########################

-						//StateVarsToNotify vars=monitor.getStateVars(sid);

-                        

-						monitor.addListener(sid,firstmsg.getListener());						

-					} else {//subscribe not ok

-						Activator.logger.log(LogService.LOG_ERROR,"Sucribe failed");

+			if (running) {

+				if (msg instanceof FirstMessage) {

+					FirstMessage firstmsg = (FirstMessage) msg;

+					Service service = firstmsg.getService();

+					if (!service.isSubscribed()) {//is not subscribe

+						boolean ok = ctrl.subscribe(service,120000);

+						String sid = "";

+						if (ok) {//subcribe ok	                        

+							sid = service.getSID();

+							firstmsg.setSid(sid);                        

+							monitor.addListener(sid,firstmsg.getListener());						

+						} else {//subscribe not ok

+							Activator.logger.log(LogService.LOG_ERROR,"Sucribe failed");

+						}

+					} else {// already subscribe

+						monitor.addListener(service.getSID(),firstmsg.getListener());

 					}

-				} else {// already subscribe

-					monitor.addListener(service.getSID(),firstmsg.getListener());

+				} else if (msg instanceof ListenerModified) {

+					monitor.updateListener((ListenerModified)msg,subQueue,ctrl);

+				} else if (msg instanceof ListenerUnRegistration) {

+					ListenerUnRegistration unreg=(ListenerUnRegistration)msg;

+					monitor.delListener(unreg.getListener(),ctrl);

+				} else if(msg instanceof SidExipired){

+				    Activator.logger.WARNING("[Importer] Please report the bug. Used code - should be checked and removed");

 				}

-			} else if (msg instanceof ListenerModified) {

-                // ########### Renew ########################

-				monitor.updateListener((ListenerModified)msg,subQueue,ctrl/*##renew ,sidRenew*/);

-                // ########### Renew ########################

-			} else if (msg instanceof ListenerUnRegistration) {

-				ListenerUnRegistration unreg=(ListenerUnRegistration)msg;

-                // ########### Renew ########################

-				monitor.delListener(unreg.getListener(),ctrl/*##renew,sidRenew*/);

-                // ########### Renew ########################

-			} else if(msg instanceof SidExipired){

-			    Activator.logger.WARNING("[Importer] Please report the bug.Used code - should be checked and removed");

-			    /*

-				Activator.logger.INFO("Removing Expired Subscribe Service");

-				SidExipired sidExpired=(SidExipired)msg;

-				monitor.clearAll(sidExpired.getSid(),sidExpired.getService());

-				*/

 			}

 		}

 	}

 

+	public void close() {

+		running  = false;	

+		subQueue.close();

+	}

+

 }
\ No newline at end of file
diff --git a/upnp.basedriver/src/main/resources/debug/META-INF/Manifest.mf b/upnp.basedriver/src/main/resources/debug/META-INF/Manifest.mf
index 2b50c3b..90db319 100644
--- a/upnp.basedriver/src/main/resources/debug/META-INF/Manifest.mf
+++ b/upnp.basedriver/src/main/resources/debug/META-INF/Manifest.mf
@@ -1,5 +1,5 @@
 Manifest-Version: 1.0

-Bundle-ClassPath: .,lib/cyberlink-1.7.2-patched-debug.jar

+Bundle-ClassPath: .,lib/cyberlink-1.7.3-patched-debug.jar

 Bundle-Author: Matteo Demuru <matte-d@users.sourceforge.net>,Stefano "

  Kismet" Lenzi <kismet-sl@users.sourceforge.net>,Francesco Furfari <fr

  ancesco.furfari@isti.cnr.it>,Satoshi Konno

diff --git a/upnp.basedriver/src/main/resources/debug/lib/cyberlink-1.7.2-patched-debug.jar b/upnp.basedriver/src/main/resources/debug/lib/cyberlink-1.7.3-patched-debug.jar
similarity index 86%
rename from upnp.basedriver/src/main/resources/debug/lib/cyberlink-1.7.2-patched-debug.jar
rename to upnp.basedriver/src/main/resources/debug/lib/cyberlink-1.7.3-patched-debug.jar
index 276fdf8..da9b05b 100644
--- a/upnp.basedriver/src/main/resources/debug/lib/cyberlink-1.7.2-patched-debug.jar
+++ b/upnp.basedriver/src/main/resources/debug/lib/cyberlink-1.7.3-patched-debug.jar
Binary files differ
diff --git a/upnp.basedriver/src/main/resources/release/META-INF/Manifest.mf b/upnp.basedriver/src/main/resources/release/META-INF/Manifest.mf
index 26732c8..2875f65 100644
--- a/upnp.basedriver/src/main/resources/release/META-INF/Manifest.mf
+++ b/upnp.basedriver/src/main/resources/release/META-INF/Manifest.mf
@@ -1,5 +1,5 @@
 Manifest-Version: 1.0

-Bundle-ClassPath: .,lib/cyberlink-1.7.2-patched-release.jar

+Bundle-ClassPath: .,lib/cyberlink-1.7.3-patched-release.jar

 Bundle-Author: Matteo Demuru <matte-d@users.sourceforge.net>,Stefano "

  Kismet" Lenzi <kismet-sl@users.sourceforge.net>,Francesco Furfari <fr

  ancesco.furfari@isti.cnr.it>,Satoshi Konno

diff --git a/upnp.basedriver/src/main/resources/release/lib/cyberlink-1.7.2-patched-release.jar b/upnp.basedriver/src/main/resources/release/lib/cyberlink-1.7.3-patched-release.jar
similarity index 80%
rename from upnp.basedriver/src/main/resources/release/lib/cyberlink-1.7.2-patched-release.jar
rename to upnp.basedriver/src/main/resources/release/lib/cyberlink-1.7.3-patched-release.jar
index d0f033f..b93ee9e 100644
--- a/upnp.basedriver/src/main/resources/release/lib/cyberlink-1.7.2-patched-release.jar
+++ b/upnp.basedriver/src/main/resources/release/lib/cyberlink-1.7.3-patched-release.jar
Binary files differ