You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2020/05/04 14:08:38 UTC
[openmeetings] branch master updated: [OPENMEETINGS-2301] code is
improved a bit (original issue still reproducible)
This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/master by this push:
new 8b0c13e [OPENMEETINGS-2301] code is improved a bit (original issue still reproducible)
8b0c13e is described below
commit 8b0c13e05f0d6da1f561b54ce2fe8b4b2c7192de
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Mon May 4 21:08:23 2020 +0700
[OPENMEETINGS-2301] code is improved a bit (original issue still reproducible)
---
.../openmeetings/core/remote/KurentoHandler.java | 37 +++++++++++-----------
.../openmeetings/core/remote/StreamProcessor.java | 12 +++++--
2 files changed, 28 insertions(+), 21 deletions(-)
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
index 348f3e3..0276767 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
@@ -122,16 +122,19 @@ public class KurentoHandler {
public void init() {
check = () -> {
try {
- if (isConnected()) {
+ if (client != null) {
return;
}
+ log.debug("Reconnecting KMS");
kuid = randomUUID().toString();
- client = KurentoClient.create(kurentoWsUrl, new KConnectionListener(kuid));
+ client = KurentoClient.create(kurentoWsUrl, new KConnectionListener());
client.getServerManager().addObjectCreatedListener(new KWatchDogCreate());
client.getServerManager().addObjectDestroyedListener(event ->
log.debug("Kurento::ObjectDestroyedEvent objectId {}, tags {}, source {}", event.getObjectId(), event.getTags(), event.getSource())
);
} catch (Exception e) {
+ connected = false;
+ clean();
log.warn("Fail to create Kurento client, will re-try in {} ms", checkTimeout);
}
};
@@ -146,15 +149,19 @@ public class KurentoHandler {
private void clean() {
if (client != null) {
- kuid = randomUUID().toString(); // will be changed to prevent double events
- client.destroy();
+ KurentoClient copy = client;
+ client = null;
+ testProcessor.destroy();
+ streamProcessor.destroy();
for (Entry<Long, KRoom> e : rooms.entrySet()) {
e.getValue().close();
}
- testProcessor.destroy();
- streamProcessor.destroy();
rooms.clear();
- client = null;
+ if (copy != null && !copy.isClosed()) {
+ log.debug("Client will destroyed ...");
+ copy.destroy();
+ log.debug(".... Client is destroyed");
+ }
}
}
@@ -223,7 +230,7 @@ public class KurentoHandler {
}
public void remove(IWsClient c) {
- if (!isConnected() ||c == null) {
+ if (!isConnected() || c == null) {
return;
}
if (!(c instanceof Client)) {
@@ -365,12 +372,6 @@ public class KurentoHandler {
}
private class KConnectionListener implements KurentoConnectionListener {
- final String lkuid;
-
- private KConnectionListener(final String lkuid) {
- this.lkuid = lkuid;
- }
-
private void notifyRooms() {
WebSocketHelper.sendServer(new TextRoomMessage(null, new User(), RoomMessage.Type.KURENTO_STATUS, new JSONObject().put("connected", isConnected()).toString()));
}
@@ -383,11 +384,9 @@ public class KurentoHandler {
@Override
public void disconnected() {
log.info("Kurento disconnected");
- if (lkuid.equals(kuid)) {
- connected = false;
- notifyRooms();
- clean();
- }
+ connected = false;
+ notifyRooms();
+ clean();
}
@Override
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
index 4fa49fe..729e77a 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
@@ -174,8 +174,11 @@ public class StreamProcessor implements IStreamProcessor {
}
private void handleBroadcastStarted(Client c, final String uid, JSONObject msg) {
+ if (!kHandler.isConnected()) {
+ return;
+ }
StreamDesc sd = c.getStream(uid);
- KStream sender= getByUid(uid);
+ KStream sender = getByUid(uid);
try {
if (sender == null) {
KRoom room = kHandler.getRoom(c.getRoomId());
@@ -230,6 +233,9 @@ public class StreamProcessor implements IStreamProcessor {
public void toggleActivity(Client c, Activity a) {
log.info("PARTICIPANT {}: trying to toggle activity {}", c, a);
+ if (!kHandler.isConnected()) {
+ return;
+ }
if (activityAllowed(c, a, c.getRoom())) {
boolean wasBroadcasting = isBroadcasting(c);
@@ -567,6 +573,8 @@ public class StreamProcessor implements IStreamProcessor {
@Override
public void destroy() {
- streamByUid.clear();
+ for (Map.Entry<String, KStream> e : streamByUid.entrySet()) {
+ release(e.getValue(), true);
+ }
}
}