desklink: recycle MixerControl and correctly release media nodes.
Change-Id: Id00a7fdb3bfd995bf6891bac85d21931f527606c Reviewed-on: https://review.haiku-os.org/c/haiku/+/2237 Reviewed-by: waddlesplash <[email protected]> Reviewed-by: Stephan Aßmus <[email protected]>
This commit is contained in:
@@ -180,6 +180,7 @@ MediaReplicant::MediaReplicant(BRect frame, const char* name,
|
||||
uint32 resizeMask, uint32 flags)
|
||||
:
|
||||
BView(frame, name, resizeMask, flags),
|
||||
fMixerControl(NULL),
|
||||
fVolumeSlider(NULL),
|
||||
fMuted(false)
|
||||
{
|
||||
@@ -190,6 +191,7 @@ MediaReplicant::MediaReplicant(BRect frame, const char* name,
|
||||
MediaReplicant::MediaReplicant(BMessage* message)
|
||||
:
|
||||
BView(message),
|
||||
fMixerControl(NULL),
|
||||
fVolumeSlider(NULL),
|
||||
fMuted(false)
|
||||
{
|
||||
@@ -414,12 +416,11 @@ MediaReplicant::MessageReceived(BMessage* message)
|
||||
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 @@ MediaReplicant::_DisconnectMixer()
|
||||
|
||||
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 @@ MediaReplicant::_ConnectMixer()
|
||||
|
||||
if (errorString != NULL) {
|
||||
SetToolTip(errorString);
|
||||
delete fMixerControl;
|
||||
fMixerControl = NULL;
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
|
||||
@@ -155,7 +155,7 @@ MixerControl::Connect(int32 volumeWhich, float* _value, const char** _error)
|
||||
errorString = "Media services not running";
|
||||
|
||||
if (status != B_OK) {
|
||||
fGainMediaNode = media_node::null;
|
||||
_Disconnect();
|
||||
fMuteMediaNode = media_node::null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user