From Jérôme Duval <jerome.duval@xxxxxxxxx>:
Jérôme Duval has uploaded this change for review. (
https://review.haiku-os.org/c/haiku/+/2237 ;)
Change subject: desklink: recycle MixerControl and correctly release media
nodes.
......................................................................
desklink: recycle MixerControl and correctly release media nodes.
---
M src/bin/desklink/MediaReplicant.cpp
M src/bin/desklink/MixerControl.cpp
2 files changed, 11 insertions(+), 5 deletions(-)
git pull ssh://git.haiku-os.org:22/haiku refs/changes/37/2237/1
diff --git a/src/bin/desklink/MediaReplicant.cpp
b/src/bin/desklink/MediaReplicant.cpp
index 5bbc523..d37a205 100644
--- a/src/bin/desklink/MediaReplicant.cpp
+++ b/src/bin/desklink/MediaReplicant.cpp
@@ -180,6 +180,7 @@
uint32 resizeMask, uint32 flags)
:
BView(frame, name, resizeMask, flags),
+ fMixerControl(NULL),
fVolumeSlider(NULL),
fMuted(false)
{
@@ -190,6 +191,7 @@
MediaReplicant::MediaReplicant(BMessage* message)
:
BView(message),
+ fMixerControl(NULL),
fVolumeSlider(NULL),
fMuted(false)
{
@@ -414,12 +416,11 @@
media_node_id mixerNodeID;
BMediaRoster* roster = BMediaRoster::CurrentRoster();
if (roster != NULL
- &&
message->FindInt32("media_node_id",&mixerNodeID) == B_OK
+ && message->FindInt32("media_node_id",
&mixerNodeID) == B_OK
&& roster->GetNodeFor(mixerNodeID, &mixerNode)
== B_OK) {
- if (mixerNode.kind == B_SYSTEM_MIXER) {
+ if (mixerNode.kind == B_SYSTEM_MIXER)
_ConnectMixer();
- roster->ReleaseNode(mixerNode);
- }
+ roster->ReleaseNode(mixerNode);
}
break;
}
@@ -595,6 +596,9 @@
roster->StopWatching(this, B_MEDIA_SERVER_STARTED |
B_MEDIA_NODE_CREATED);
+ if (fMixerControl == NULL)
+ return;
+
if (fMixerControl->MuteNode() != media_node::null) {
roster->StopWatching(this, fMixerControl->MuteNode(),
B_MEDIA_NEW_PARAMETER_VALUE);
@@ -624,6 +628,8 @@
if (errorString != NULL) {
SetToolTip(errorString);
+ delete fMixerControl;
+ fMixerControl = NULL;
return B_ERROR;
}
diff --git a/src/bin/desklink/MixerControl.cpp
b/src/bin/desklink/MixerControl.cpp
index cdc6d3f..7b989f3 100644
--- a/src/bin/desklink/MixerControl.cpp
+++ b/src/bin/desklink/MixerControl.cpp
@@ -155,7 +155,7 @@
errorString = "Media services not running";
if (status != B_OK) {
- fGainMediaNode = media_node::null;
+ _Disconnect();
fMuteMediaNode = media_node::null;
}
--
To view, visit https://review.haiku-os.org/c/haiku/+/2237
To unsubscribe, or for help writing mail filters, visit
https://review.haiku-os.org/settings
Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: Id00a7fdb3bfd995bf6891bac85d21931f527606c
Gerrit-Change-Number: 2237
Gerrit-PatchSet: 1
Gerrit-Owner: Jérôme Duval <jerome.duval@xxxxxxxxx>
Gerrit-MessageType: newchange