forked from j62/ctbrec
1
0
Fork 0

Use AtomicBoolen to indicate, if a download has finished

This commit is contained in:
0xboobface 2019-12-29 14:29:36 +01:00
parent 4dd99a6dd3
commit 16dfc07a8e
3 changed files with 17 additions and 11 deletions

View File

@ -21,6 +21,7 @@ import java.util.Locale;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.regex.Pattern;
import javax.xml.bind.JAXBContext;
@ -56,7 +57,7 @@ public class DashDownload extends AbstractDownload {
private boolean audioInitLoaded = false;
private BigInteger lastAudioTimestamp = BigInteger.ZERO;
private BigInteger lastVideoTimestamp = BigInteger.ZERO;
private transient Object downloadFinished = new Object();
private transient AtomicBoolean downloadFinished = new AtomicBoolean(false);
private transient HttpClient httpClient;
private transient Config config;
private Model model;
@ -270,6 +271,7 @@ public class DashDownload extends AbstractDownload {
} finally {
running = false;
endTime = Instant.now();
downloadFinished.set(true);
synchronized (downloadFinished) {
downloadFinished.notifyAll();
}
@ -348,8 +350,8 @@ public class DashDownload extends AbstractDownload {
if (running) {
internalStop();
try {
while (running) {
synchronized (downloadFinished) {
while (!downloadFinished.get()) {
downloadFinished.wait(TimeUnit.SECONDS.toMillis(1));
}
}

View File

@ -52,11 +52,11 @@ public abstract class AbstractHlsDownload extends AbstractDownload {
private static final Logger LOG = LoggerFactory.getLogger(AbstractHlsDownload.class);
private static int threadCounter = 0;
protected HttpClient client;
protected transient HttpClient client;
protected volatile boolean running = false;
protected Model model = new UnknownModel();
protected LinkedBlockingQueue<Runnable> downloadQueue = new LinkedBlockingQueue<>(50);
protected ExecutorService downloadThreadPool = new ThreadPoolExecutor(5, 5, 2, TimeUnit.MINUTES, downloadQueue, createThreadFactory());
protected transient LinkedBlockingQueue<Runnable> downloadQueue = new LinkedBlockingQueue<>(50);
protected transient ExecutorService downloadThreadPool = new ThreadPoolExecutor(5, 5, 2, TimeUnit.MINUTES, downloadQueue, createThreadFactory());
protected State state = State.UNKNOWN;
private int playlistEmptyCount = 0;

View File

@ -24,6 +24,7 @@ import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.regex.Pattern;
import org.slf4j.Logger;
@ -57,7 +58,7 @@ public class HlsDownload extends AbstractHlsDownload {
private int segmentCounter = 1;
private NumberFormat nf = new DecimalFormat("000000");
private transient Object downloadFinished = new Object();
private transient AtomicBoolean downloadFinished = new AtomicBoolean(false);
private ZonedDateTime splitRecStartTime;
private transient Config config;
@ -171,6 +172,7 @@ public class HlsDownload extends AbstractHlsDownload {
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
downloadFinished.set(true);
synchronized (downloadFinished) {
downloadFinished.notifyAll();
}
@ -242,8 +244,10 @@ public class HlsDownload extends AbstractHlsDownload {
internalStop();
try {
synchronized (downloadFinished) {
while (!downloadFinished.get()) {
downloadFinished.wait(TimeUnit.SECONDS.toMillis(60));
}
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
LOG.error("Couldn't wait for download to finish", e);