forked from j62/ctbrec
Shut down all recordings simultaneously
This commit is contained in:
parent
6cfdb59c96
commit
5c0d841474
|
@ -25,6 +25,7 @@ import java.util.concurrent.BlockingQueue;
|
|||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.ExecutorCompletionService;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
|
@ -505,8 +506,20 @@ public class NextGenLocalRecorder implements Recorder {
|
|||
try {
|
||||
// make a copy to avoid ConcurrentModificationException
|
||||
List<Recording> toStop = new ArrayList<>(recordingProcesses.values());
|
||||
if (!toStop.isEmpty()) {
|
||||
ExecutorService shutdownPool = Executors.newFixedThreadPool(toStop.size());
|
||||
List<Future<?>> shutdownFutures = new ArrayList<>(toStop.size());
|
||||
for (Recording rec : toStop) {
|
||||
Optional.ofNullable(rec.getDownload()).ifPresent(Download::stop);
|
||||
Optional.ofNullable(rec.getDownload()).ifPresent(d -> {
|
||||
shutdownFutures.add(shutdownPool.submit(() -> d.stop()));
|
||||
});
|
||||
}
|
||||
shutdownPool.shutdown();
|
||||
try {
|
||||
shutdownPool.awaitTermination(10, TimeUnit.MINUTES);
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
recorderLock.unlock();
|
||||
|
|
|
@ -391,13 +391,13 @@ public class MergedFfmpegHlsDownload extends AbstractHlsDownload {
|
|||
|
||||
try {
|
||||
downloadQueue.clear();
|
||||
for (Future<?> future : downloads) {
|
||||
future.cancel(true);
|
||||
}
|
||||
downloadThreadPool.shutdownNow();
|
||||
LOG.debug("Waiting for segment download thread pool to terminate for model {}", getModel());
|
||||
downloadThreadPool.awaitTermination(60, TimeUnit.SECONDS);
|
||||
LOG.debug("Segment download thread pool terminated for model {}", getModel());
|
||||
for (Future<?> future : downloads) {
|
||||
future.cancel(true);
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
LOG.error("Interrupted while waiting for segment pool to shutdown");
|
||||
Thread.currentThread().interrupt();
|
||||
|
|
Loading…
Reference in New Issue