From eed8ce57b828343ecbdbd240e125519f11746803 Mon Sep 17 00:00:00 2001 From: Dario Casalinuovo Date: Sat, 9 Jul 2016 16:19:31 +0200 Subject: [PATCH] http_streamer: Implement IsRunning, more reliability * The init sem is released also when the request is completed to be sure the backend doesn't lock on us. * Implement IsRunning relying on BUrlRequest::IsRunning. --- .../plugins/http_streamer/HTTPMediaIO.cpp | 24 +++++++++++++++---- .../media/plugins/http_streamer/HTTPMediaIO.h | 2 ++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.cpp b/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.cpp index 62b3d182ff..9aecb8b30e 100644 --- a/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.cpp +++ b/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.cpp @@ -45,11 +45,7 @@ public: void DataReceived(BUrlRequest* request, const char* data, off_t position, ssize_t size) { - if (fInitSem != -1) { - release_sem(fInitSem); - delete_sem(fInitSem); - fInitSem = -1; - } + _ReleaseInit(); if (request != fRequest) delete request; @@ -59,6 +55,8 @@ public: void RequestCompleted(BUrlRequest* request, bool success) { + _ReleaseInit(); + if (request != fRequest) return; @@ -72,6 +70,15 @@ public: } private: + void _ReleaseInit() + { + if (fInitSem != -1) { + release_sem(fInitSem); + delete_sem(fInitSem); + fInitSem = -1; + } + } + BUrlRequest* fRequest; BAdapterIO* fAdapterIO; BInputAdapter* fInputAdapter; @@ -166,6 +173,13 @@ HTTPMediaIO::Close() } +bool +HTTPMediaIO::IsRunning() const +{ + return fReq != NULL && fReq->IsRunning(); +} + + status_t HTTPMediaIO::SeekRequested(off_t position) { diff --git a/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.h b/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.h index fa5f0b116b..778b3220d5 100644 --- a/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.h +++ b/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.h @@ -30,6 +30,8 @@ public: virtual status_t Open(); virtual void Close(); + virtual bool IsRunning() const; + protected: virtual status_t SeekRequested(off_t position);