From 645f0b8231d4f796ff49c6bdf55f7845806bae32 Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Mon, 3 Jun 2019 21:16:35 +0200 Subject: [PATCH] Hopefully fixed some deadlocks --- .../ctbrec/recorder/NextGenLocalRecorder.java | 12 ++++++----- .../ctbrec/recorder/download/HlsDownload.java | 16 ++++++++------- .../recorder/download/MergedHlsDownload.java | 20 ++++++++++--------- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java b/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java index c456009a..0920da13 100644 --- a/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java +++ b/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java @@ -411,18 +411,20 @@ public class NextGenLocalRecorder implements Recorder { for (Recording rec : toStop) { Optional.ofNullable(rec.getDownload()).ifPresent(Download::stop); } + } finally { + recordingsLock.unlock(); + } - // wait for post-processing to finish - LOG.info("Waiting for downloads to finish"); - while (!recordingProcesses.isEmpty()) { + // wait for post-processing to finish + LOG.info("Waiting for downloads to finish"); + for (int i = 0; i < 60; i++) { + if (!recordingProcesses.isEmpty()) { try { Thread.sleep(1000); } catch (InterruptedException e) { LOG.error("Error while waiting for downloads to finish", e); } } - } finally { - recordingsLock.unlock(); } // shutdown threadpools diff --git a/common/src/main/java/ctbrec/recorder/download/HlsDownload.java b/common/src/main/java/ctbrec/recorder/download/HlsDownload.java index 187a42b4..bcbf5dd5 100644 --- a/common/src/main/java/ctbrec/recorder/download/HlsDownload.java +++ b/common/src/main/java/ctbrec/recorder/download/HlsDownload.java @@ -237,14 +237,16 @@ public class HlsDownload extends AbstractHlsDownload { } @Override - public void stop() { - internalStop(); - try { - synchronized (downloadFinished) { - downloadFinished.wait(); + public synchronized void stop() { + if (running) { + internalStop(); + try { + synchronized (downloadFinished) { + downloadFinished.wait(); + } + } catch (InterruptedException e) { + LOG.error("Couldn't wait for download to finish", e); } - } catch (InterruptedException e) { - LOG.error("Couldn't wait for download to finish", e); } } diff --git a/common/src/main/java/ctbrec/recorder/download/MergedHlsDownload.java b/common/src/main/java/ctbrec/recorder/download/MergedHlsDownload.java index 27c5923a..2247df7a 100644 --- a/common/src/main/java/ctbrec/recorder/download/MergedHlsDownload.java +++ b/common/src/main/java/ctbrec/recorder/download/MergedHlsDownload.java @@ -374,17 +374,19 @@ public class MergedHlsDownload extends AbstractHlsDownload { } @Override - public void stop() { - internalStop(); - try { - synchronized (downloadFinished) { - LOG.debug("Waiting for finished notify {}", model); - downloadFinished.wait(); + public synchronized void stop() { + if (running) { + internalStop(); + try { + synchronized (downloadFinished) { + LOG.debug("Waiting for finished notify {}", model); + downloadFinished.wait(); + } + } catch (InterruptedException e) { + LOG.error("Couldn't wait for download to finish", e); } - } catch (InterruptedException e) { - LOG.error("Couldn't wait for download to finish", e); + LOG.debug("Download stopped"); } - LOG.debug("Download stopped"); } @Override