Disconnect and unreference all peak indicator stream objects

Most of sink input peak indicator streams are still connected alive at the time
their widgets are destroyed. Disconnect and unreference each one to stop memory
leak.

When sink input peak indicator stream is recreated, previous stream is only
disconnected but not unreferenced. Unreference it to stop memory leak.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pavucontrol/-/merge_requests/62>
This commit is contained in:
Igor V. Kovalenko 2021-08-14 19:41:27 +03:00
parent 223c6964a8
commit 4bc93d9d9c
3 changed files with 10 additions and 0 deletions

View File

@ -703,6 +703,7 @@ void MainWindow::createMonitorStreamForSinkInput(SinkInputWidget* w, uint32_t si
if (w->peak) {
pa_stream_disconnect(w->peak);
pa_stream_unref(w->peak);
w->peak = NULL;
}

View File

@ -39,6 +39,14 @@ MinimalStreamWidget::MinimalStreamWidget(BaseObjectType* cobject) :
volumeMeterVisible(true) {
}
MinimalStreamWidget::~MinimalStreamWidget() {
if (peak) {
pa_stream_disconnect(peak);
pa_stream_unref(peak);
peak = NULL;
}
}
void MinimalStreamWidget::init() {
/* Set up the peak meter. This is not done in the constructor, because
* channelsVBox is initialized by the subclasses, so it's not yet available

View File

@ -26,6 +26,7 @@
class MinimalStreamWidget : public Gtk::VBox {
public:
MinimalStreamWidget(BaseObjectType* cobject);
virtual ~MinimalStreamWidget();
/* Subclass constructors are expected to initialize these variables.
* MinimalStreamWidget can't initialize these, because the glade object