From ea7eb715a2b1fa741c1a6d68e70e6a2d1896780e Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 17 Mar 2026 21:25:01 +0000 Subject: [PATCH] microslop made async await deadlocks; try make list sessions work; update libomv --- .../os-webrtc-janus/Janus/JanusAudioBridge.cs | 4 +-- .../os-webrtc-janus/Janus/JanusMessages.cs | 2 +- .../os-webrtc-janus/Janus/JanusPlugin.cs | 4 +-- .../Addons/os-webrtc-janus/Janus/JanusRoom.cs | 14 +++++----- .../os-webrtc-janus/Janus/JanusSession.cs | 26 +++++++++--------- .../Janus/WebRtcJanusService.cs | 8 +++--- bin/OpenMetaverse.Rendering.Meshmerizer.dll | Bin 28672 -> 28672 bytes bin/OpenMetaverse.StructuredData.dll | Bin 131072 -> 131072 bytes bin/OpenMetaverse.dll | Bin 2236416 -> 2236416 bytes 9 files changed, 29 insertions(+), 29 deletions(-) diff --git a/OpenSim/Addons/os-webrtc-janus/Janus/JanusAudioBridge.cs b/OpenSim/Addons/os-webrtc-janus/Janus/JanusAudioBridge.cs index f71137015e..b6186b55ab 100644 --- a/OpenSim/Addons/os-webrtc-janus/Janus/JanusAudioBridge.cs +++ b/OpenSim/Addons/os-webrtc-janus/Janus/JanusAudioBridge.cs @@ -89,7 +89,7 @@ namespace osWebRtcVoice JanusRoom ret = null; try { - JanusMessageResp resp = await SendPluginMsg(new AudioBridgeCreateRoomReq(pRoomId, pSpatial, pRoomDesc)); + JanusMessageResp resp = await SendPluginMsg(new AudioBridgeCreateRoomReq(pRoomId, pSpatial, pRoomDesc)).ConfigureAwait(false); AudioBridgeResp abResp = new(resp); m_log.Debug($"{LogHeader} CreateRoom. ReturnCode: '{abResp.AudioBridgeReturnCode}'"); @@ -202,7 +202,7 @@ namespace osWebRtcVoice // The room doesn't exist. Create it. string roomDesc = pRegionId + "/" + pChannelType + "/" + pParcelLocalID + "/" + pChannelID; - JanusRoom ret = await CreateRoom(roomNumber, pSpatial, roomDesc); + JanusRoom ret = await CreateRoom(roomNumber, pSpatial, roomDesc).ConfigureAwait(false); JanusRoom existingRoom = null; if (ret is not null) diff --git a/OpenSim/Addons/os-webrtc-janus/Janus/JanusMessages.cs b/OpenSim/Addons/os-webrtc-janus/Janus/JanusMessages.cs index 5c108bf042..44f4378d56 100644 --- a/OpenSim/Addons/os-webrtc-janus/Janus/JanusMessages.cs +++ b/OpenSim/Addons/os-webrtc-janus/Janus/JanusMessages.cs @@ -563,7 +563,7 @@ namespace osWebRtcVoice public AudioBridgeAgentJoinRoomReq(int pRoomId, UUID Agent) : base(new OSDMap() { { "request", "join" }, { "room", pRoomId }, - { "id", new OSDNLong(Math.Abs((long)(Agent.ulonga ^ Agent.ulongb)))}, + { "id", new OSDLong(Math.Abs((long)(Agent.ulonga ^ Agent.ulongb)))}, { "display", Agent.ToString() } }) { diff --git a/OpenSim/Addons/os-webrtc-janus/Janus/JanusPlugin.cs b/OpenSim/Addons/os-webrtc-janus/Janus/JanusPlugin.cs index 9ce6ceeec3..da3a30d538 100644 --- a/OpenSim/Addons/os-webrtc-janus/Janus/JanusPlugin.cs +++ b/OpenSim/Addons/os-webrtc-janus/Janus/JanusPlugin.cs @@ -88,7 +88,7 @@ namespace osWebRtcVoice bool ret = false; try { - JanusMessageResp resp = await _JanusSession.SendToSession(new AttachPluginReq(PluginName)); + JanusMessageResp resp = await _JanusSession.SendToSession(new AttachPluginReq(PluginName)).ConfigureAwait(false); if (resp is not null && resp.isSuccess) { AttachPluginResp handleResp = new(resp); @@ -126,7 +126,7 @@ namespace osWebRtcVoice _JanusSession.OnEvent -= Handle_Event; _JanusSession.OnMessage -= Handle_Message; // We send the 'detach' message to the plugin URI - JanusMessageResp resp = await _JanusSession.SendToJanus(new DetachPluginReq(), PluginUri); + JanusMessageResp resp = await _JanusSession.SendToJanus(new DetachPluginReq(), PluginUri).ConfigureAwait(false); if (resp is not null && resp.isSuccess) { m_log.DebugFormat("{0} Detach. Detached", LogHeader); diff --git a/OpenSim/Addons/os-webrtc-janus/Janus/JanusRoom.cs b/OpenSim/Addons/os-webrtc-janus/Janus/JanusRoom.cs index b156f25f38..a49911fb4e 100644 --- a/OpenSim/Addons/os-webrtc-janus/Janus/JanusRoom.cs +++ b/OpenSim/Addons/os-webrtc-janus/Janus/JanusRoom.cs @@ -72,7 +72,7 @@ namespace osWebRtcVoice // joinReq.SetJsep("offer", cleanSdp); joinReq.SetJsep("offer", pVSession.Offer); - JanusMessageResp resp = await _AudioBridge.SendPluginMsg(joinReq); + JanusMessageResp resp = await _AudioBridge.SendPluginMsg(joinReq).ConfigureAwait(false); AudioBridgeJoinRoomResp joinResp = new(resp); if (joinResp is not null && joinResp.AudioBridgeReturnCode == "joined" && joinResp.ParticipantId > 0) @@ -86,12 +86,12 @@ namespace osWebRtcVoice { m_log.Warn($"{LogHeader} JoinRoom. Already in a room for agent {pVSession.AgentId}. Attempting recovery."); - bool recovered = await RecoverAlreadyInRoomAndLeave(pVSession.AgentId.ToString()); + bool recovered = await RecoverAlreadyInRoomAndLeave(pVSession.AgentId.ToString()).ConfigureAwait(false); if (recovered) { AudioBridgeAgentJoinRoomReq retryJoinReq = new(RoomId, pVSession.AgentId); retryJoinReq.SetJsep("offer", pVSession.Offer); - JanusMessageResp retryResp = await _AudioBridge.SendPluginMsg(retryJoinReq); + JanusMessageResp retryResp = await _AudioBridge.SendPluginMsg(retryJoinReq).ConfigureAwait(false); AudioBridgeJoinRoomResp retryJoinResp = new(retryResp); if (retryJoinResp is not null && retryJoinResp.AudioBridgeReturnCode == "joined" && retryJoinResp.ParticipantId > 0) @@ -138,7 +138,7 @@ namespace osWebRtcVoice { try { - JanusMessageResp listRoomsRespRaw = await _AudioBridge.SendPluginMsg(new AudioBridgeListRoomsReq()); + JanusMessageResp listRoomsRespRaw = await _AudioBridge.SendPluginMsg(new AudioBridgeListRoomsReq()).ConfigureAwait(false); AudioBridgeResp listRoomsResp = new AudioBridgeResp(listRoomsRespRaw); if (listRoomsResp?.PluginRespData is null || !listRoomsResp.PluginRespData.TryGetValue("list", out OSD roomListNode) || @@ -157,7 +157,7 @@ namespace osWebRtcVoice // if (roomId <= 0) // continue; - JanusMessageResp listParticipantsRespRaw = await _AudioBridge.SendPluginMsg(new AudioBridgeListParticipantsReq(roomId)); + JanusMessageResp listParticipantsRespRaw = await _AudioBridge.SendPluginMsg(new AudioBridgeListParticipantsReq(roomId)).ConfigureAwait(false); AudioBridgeResp listParticipantsResp = new AudioBridgeResp(listParticipantsRespRaw); if (listParticipantsResp?.PluginRespData is null || !listParticipantsResp.PluginRespData.TryGetValue("participants", out OSD participantsNode) || @@ -177,7 +177,7 @@ namespace osWebRtcVoice if (participantId <= 0) continue; - JanusMessageResp leaveRespRaw = await _AudioBridge.SendPluginMsg(new AudioBridgeLeaveRoomReq(roomId, participantId)); + JanusMessageResp leaveRespRaw = await _AudioBridge.SendPluginMsg(new AudioBridgeLeaveRoomReq(roomId, participantId)).ConfigureAwait(false); AudioBridgeResp leaveResp = new(leaveRespRaw); if (leaveResp is not null) @@ -226,7 +226,7 @@ namespace osWebRtcVoice try { JanusMessageResp resp = await _AudioBridge.SendPluginMsg( - new AudioBridgeLeaveRoomReq(RoomId, pAttendeeSession.ParticipantId)); + new AudioBridgeLeaveRoomReq(RoomId, pAttendeeSession.ParticipantId)).ConfigureAwait(false); if (resp is null) { diff --git a/OpenSim/Addons/os-webrtc-janus/Janus/JanusSession.cs b/OpenSim/Addons/os-webrtc-janus/Janus/JanusSession.cs index ab2c1fa169..4fbc71edc9 100644 --- a/OpenSim/Addons/os-webrtc-janus/Janus/JanusSession.cs +++ b/OpenSim/Addons/os-webrtc-janus/Janus/JanusSession.cs @@ -102,7 +102,7 @@ namespace osWebRtcVoice bool ret = false; try { - JanusMessageResp resp = await SendToJanus(new CreateSessionReq()); + JanusMessageResp resp = await SendToJanus(new CreateSessionReq()).ConfigureAwait(false); if (resp is not null && resp.isSuccess) { CreateSessionResp sessionResp = new(resp); @@ -132,7 +132,7 @@ namespace osWebRtcVoice bool ret = false; try { - JanusMessageResp resp = await SendToSession(new DestroySessionReq()); + JanusMessageResp resp = await SendToSession(new DestroySessionReq()).ConfigureAwait(false); if (resp is not null && resp.isSuccess) { // Note that setting IsConnected to false will cause the long poll to exit @@ -185,11 +185,11 @@ namespace osWebRtcVoice // if the audiobridge is active, the trickle message is sent to it if (pVSession.AudioBridge is null) { - ret = await SendToJanusNoWait(new TrickleReq(pVSession, pCandidates)); + ret = await SendToJanusNoWait(new TrickleReq(pVSession, pCandidates)).ConfigureAwait(false); } else { - ret = await SendToJanusNoWait(new TrickleReq(pVSession, pCandidates), pVSession.AudioBridge.PluginUri); + ret = await SendToJanusNoWait(new TrickleReq(pVSession, pCandidates), pVSession.AudioBridge.PluginUri).ConfigureAwait(false); } return ret; } @@ -200,11 +200,11 @@ namespace osWebRtcVoice // if the audiobridge is active, the trickle message is sent to it if (pVSession.AudioBridge is null) { - ret = await SendToJanusNoWait(new TrickleReq(pVSession)); + ret = await SendToJanusNoWait(new TrickleReq(pVSession)).ConfigureAwait(false); } else { - ret = await SendToJanusNoWait(new TrickleReq(pVSession), pVSession.AudioBridge.PluginUri); + ret = await SendToJanusNoWait(new TrickleReq(pVSession), pVSession.AudioBridge.PluginUri).ConfigureAwait(false); } return ret; } @@ -286,11 +286,11 @@ namespace osWebRtcVoice reqMsg.Content = new StringContent(reqStr, System.Text.Encoding.UTF8, MediaTypeNames.Application.Json); reqMsg.Headers.TryAddWithoutValidation("Accept", "application/json"); // HttpResponseMessage response = await httpClient.SendAsync(reqMsg, _CancelTokenSource.Token); - HttpResponseMessage response = await httpClient.SendAsync(reqMsg); + HttpResponseMessage response = await httpClient.SendAsync(reqMsg).ConfigureAwait(false); if (response.IsSuccessStatusCode) { - string respStr = await response.Content.ReadAsStringAsync(); + string respStr = await response.Content.ReadAsStringAsync().ConfigureAwait(false); ret = JanusMessageResp.FromJson(respStr); if (ret.CheckReturnCode("ack")) { @@ -356,8 +356,8 @@ namespace osWebRtcVoice string reqStr = pReq.ToJson(); reqMsg.Content = new StringContent(reqStr, System.Text.Encoding.UTF8, MediaTypeNames.Application.Json); reqMsg.Headers.TryAddWithoutValidation("Accept", "application/json"); - HttpResponseMessage response = await httpClient.SendAsync(reqMsg); - string respStr = await response.Content.ReadAsStringAsync(); + HttpResponseMessage response = await httpClient.SendAsync(reqMsg).ConfigureAwait(false); + string respStr = await response.Content.ReadAsStringAsync().ConfigureAwait(false); ret = JanusMessageResp.FromJson(respStr); } catch (Exception e) @@ -399,12 +399,12 @@ namespace osWebRtcVoice // The following two are required for the WebSocket interface. They are optional for the // HTTP interface since the session and plugin handle are in the URL. // SessionId is added to the message if not already there - if (!pReq.hasSessionId && !string.IsNullOrEmpty(SessionId)) + if (!admin && !pReq.hasSessionId && !string.IsNullOrEmpty(SessionId)) { pReq.AddSessionId(SessionId); } // HandleId connects to the plugin - if (!pReq.hasHandleId && !string.IsNullOrEmpty(PluginId)) + if (!admin && !pReq.hasHandleId && !string.IsNullOrEmpty(PluginId)) { pReq.AddHandleId(PluginId); } @@ -564,7 +564,7 @@ namespace osWebRtcVoice { try { - JanusMessageResp resp = await GetFromJanus(SessionUri, 60000); + JanusMessageResp resp = await GetFromJanus(SessionUri, 60000).ConfigureAwait(false); if (resp is not null) { //_ = Task.Run(() => diff --git a/OpenSim/Addons/os-webrtc-janus/Janus/WebRtcJanusService.cs b/OpenSim/Addons/os-webrtc-janus/Janus/WebRtcJanusService.cs index 0c2eae90eb..a861f66700 100644 --- a/OpenSim/Addons/os-webrtc-janus/Janus/WebRtcJanusService.cs +++ b/OpenSim/Addons/os-webrtc-janus/Janus/WebRtcJanusService.cs @@ -439,7 +439,7 @@ namespace osWebRtcVoice { "sdpMLineIndex", candidate.ContainsKey("sdpMLineIndex") ? candidate["sdpMLineIndex"].AsLong() : 0 } } ]; - resp = await viewerSession.Session.TrickleCandidates(viewerSession, candidatesArray); + resp = await viewerSession.Session.TrickleCandidates(viewerSession, candidatesArray).ConfigureAwait(false); _log.Debug($"{LogHeader} VoiceSignalingRequest: single candidate"); } } @@ -752,7 +752,7 @@ namespace osWebRtcVoice if (_ViewerSession is null || _ViewerSession.Session is null) return; - JanusMessageResp resp = await _ViewerSession.Session.SendToJanusAdmin(new JanusMessageReq("list_sessions")); + JanusMessageResp resp = await _ViewerSession.Session.SendToJanusAdmin(new JanusMessageReq("list_sessions")).ConfigureAwait(false); if (resp is null) { WriteOut("Failed to get sessions (no response)"); @@ -816,7 +816,7 @@ namespace osWebRtcVoice } JanusAudioBridge ab = _ViewerSession.AudioBridge; - AudioBridgeResp roomsResp = await ab.SendAudioBridgeMsg(new AudioBridgeListRoomsReq()); + AudioBridgeResp roomsResp = await ab.SendAudioBridgeMsg(new AudioBridgeListRoomsReq()).ConfigureAwait(false); if (roomsResp is null || !roomsResp.isSuccess || roomsResp.PluginRespData is null) { WriteOut("Failed to get room list"); @@ -853,7 +853,7 @@ namespace osWebRtcVoice WriteOut(" Spatial : {0}", GetMapString(foundRoom, "spatial_audio")); WriteOut(" Recording : {0}", GetMapString(foundRoom, "record")); - AudioBridgeResp participantResp = await ab.SendAudioBridgeMsg(new AudioBridgeListParticipantsReq(roomId)); + AudioBridgeResp participantResp = await ab.SendAudioBridgeMsg(new AudioBridgeListParticipantsReq(roomId)).ConfigureAwait(false); if (participantResp is null || participantResp.PluginRespData is null || !participantResp.PluginRespData.TryGetValue("participants", out OSD participantsNode) || participantsNode is not OSDArray participants) diff --git a/bin/OpenMetaverse.Rendering.Meshmerizer.dll b/bin/OpenMetaverse.Rendering.Meshmerizer.dll index 2a3e7ed3ef5e96b5d5f79cce312733d0f3333c1f..60db9179b7a8150d030759aa1499979461dcaaea 100755 GIT binary patch delta 107 zcmZp8z}WDBaY6^n^@YY0H}*`i66pDR=|^dIug46DtA}O36o1`pV4c9i;x)}>)8r}k z0RjvM95psyb9HR*Sy;_^&0*u@FZPuRP{E7Gp@KlwMgdEO0>YNAYn-d#c4u?1L$N*p DxUey{ delta 107 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 Y(-&l~`7FI*VJ(T?paFWx(h#fv7ti(gZ~y=R delta 42390 zcmd?Sdz{VH_dmY(K9@Oj=6ddDu4l&Fj=3=RG0coh?kQx*{a!9%Fcjguj3f%hOH!0e zR7xcBrU)fbDT+$SB`H#oOT3eQYwf+y>zqNCPv6h)_x$-Y8)2;kbTV6jPM@f*c?wT(`YlWX1sDhH9Dm}C+w04y|t%}+rD>}BPrU!i$ z+%x%VRaT7pR+c$VS6fh^8JMh7k7c>r>1)di19Ft`m@;j-dUA;o;vmH0Gt{n7gcauV zJ~pT{$F6qGj*d3g)+ts?vpwolAPA`~C{f3O;Byd|Y6}{u{{ev`CptQ`wxCqK41&s> z=s0t2LBl{CW{e}Nm%nd}-c=BuFRZqHqkw)G*Y9(Ket2#DvVeX#*Kc=&enf5k@_>GX zT2?PLI-rtM;uI8Y1R%V|66(b^vd&#%rRkspnZ2QQxkQv(&cG6g`O9 zZ&Aw%Qd?PT%bNw{C^33BKsSuh!{W+Z?X%U^y)B??TlZqY%5ZvK?bsxqQ=3}TBuP0B zliGU-R*W}=5@S*X%-AFfBxcqf&=F~SZzX4cBiH?nTpy6Lz30_BP21C-)X`1LRadhp z_3fr^dPV)BX%l*3ox52sr9Z1}ZtJKp@+#~f2{2Q2o_bZsAYey|Aq|;%CrD%b zV&*+rOKegLnN>8ipTfLKh z2C7dQgi)~x_)+}>GKM0*m1?Mn}chXlmHRZwp6Wd!6y19Ieo*y{5J#P_?Fa^ymFr!PAot_p~e3u2cqCm0hf zRhKlNpLW>~^u@aifgZm5ZZqtq=JW<%z&@rn>9!P@N4uh$q1$1tZ0g<{%7eOh1-h;K z3ZVD)7#YGVvPAWGXNUSrk0jvQdVuA)eeS$i2)t5h0_Ep=4y$ zbv5dq-QersJvnV5gE9|+%Bffx_H(@#P6D%)c_AG#XPZo3NOwTN2`VY5vI_0r4V8qR zPU?kvncCsrHr*j@G{@G5s4WI(l@6*_O@MLy)Z^}NF}Q*m(f#{c4DKLKA~Irv7=6KI zI=WngQR&qS_pXGPpB_&7$3~y5hhgW z)DHJy2cEsp+ZQ`d(WU3*{@EKXkZ8*Nw9U)M3=9xxsgFVBXWgLADKVj;^1%%nAw?di=R}8orW#B4( z4OVHm$?k=V1#`C1w-bge(^M6PD8y71u6{h;$-EJ2y^+l^*EFj?k4#SW4yIk-Kwb_mjG6YE zYCEC2Rh>F&PAO#SXdEtE*@Tt2>DUD$85u7l!+{Jhq)_Id9ka@%-Z?tCEhJA^8$D0t zTNd_H((56FxLi)B(^U=mli3StlGzOTE+j-|FXTO%Iqbx$$*@_1xlN-JTi}YE)eZ98 zaHmb56bYZb1y$7#0FRPaB7ikqK+8j6)`}b^=C0iQ6L7)#r%zqDQJ8{ zqlZm`r0d3351Rz37BYil8#W0NEVCXuBVCOdTdF`lb&D7zH^@EYRetxe1s!g1KMB&R z8@*40T+B=so(|tK(iYH58M>1 zX%7sd`_)+wTngO}6BstI>QB|j#;yE+bBA-&M(TIt3&8Efni6vZ2A7VBth$t`uhz6v zmpmA%;3D!qgNxh;!ZbDkS5SbFd8≫Fs0ngJSuOjEY)}Kuw&n-lv0H;B1wQaA6#$ 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 GTmA-X;-$6# diff --git a/bin/OpenMetaverse.dll b/bin/OpenMetaverse.dll index 375ef4da60769e95bffab06ee9e9fbe5ccbf84b2..265a9fa775effa56101b49eda72c2bc4ee5c3874 100755 GIT binary patch delta 213 zcmZoT(81UM#1lGLzOL*(*x1wB!`Rxx)Y`+`+QZV?!`j-z*4o3~+QZS>!`a%y)!M_| z+QZY@!`s@!*V@D1+9S}~BiPy_)Y>E5+9T51Bih;{*4iW9+9T20BiY&`)!HN7+9T82 zBiq^|*V-e$wMXHFk$^~rnr%C$?iQ~A)|Vyv*e#aMC4PL^vcYfeqqd8-&8 zP;32Ar~d3qm)0qUr+gh!c2DnltLUo$6`gVvDhg7+`1$9URf5)zZA+MsZvXjKk=+OY DFN$5I delta 213 zcmZoT(81UM#1lGLHpgCTZR~07VQlSTYVBce?O|!{VQuYUYwclg?cr$c;cV^UYVF}} z?cr(d;ce~VYwh80?Gb405p3-dYV8qj?Gb715pC@eYwZzl?U88hk!}0w1{_OtgI&T#N z1fEX&dg|rpFwZ{sIK9*f(Y@1q-YWVkKt)%=M1kt<9e&T&R(ZVI_Rls$mhC^^DzX~^ E0N^xW;s5{u