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