mirror of
https://github.com/tuxbox-fork-migrations/recycled-ni-libstb-hal.git
synced 2025-08-27 07:22:44 +02:00
try to fix segfault on open/close
Origin commit data
------------------
Branch: master
Commit: c1c2a5fc2c
Author: Jacek Jendrzej <overx300@gmail.com>
Date: 2019-08-01 (Thu, 01 Aug 2019)
------------------
No further description and justification available within origin commit message!
------------------
This commit was generated by Migit
This commit is contained in:
@@ -24,6 +24,7 @@ static Context_t *player = NULL;
|
|||||||
|
|
||||||
extern cAudio *audioDecoder;
|
extern cAudio *audioDecoder;
|
||||||
extern cVideo *videoDecoder;
|
extern cVideo *videoDecoder;
|
||||||
|
OpenThreads::Mutex cPlayback::mutex;
|
||||||
|
|
||||||
//Used by Fileplay
|
//Used by Fileplay
|
||||||
bool cPlayback::Open(playmode_t PlayMode)
|
bool cPlayback::Open(playmode_t PlayMode)
|
||||||
@@ -50,9 +51,13 @@ bool cPlayback::Open(playmode_t PlayMode)
|
|||||||
nPlaybackSpeed = 0;
|
nPlaybackSpeed = 0;
|
||||||
init_jump = -1;
|
init_jump = -1;
|
||||||
|
|
||||||
|
mutex.lock();
|
||||||
if (player)
|
if (player)
|
||||||
|
{
|
||||||
free(player);
|
free(player);
|
||||||
player = NULL;
|
player = NULL;
|
||||||
|
}
|
||||||
|
mutex.unlock();
|
||||||
|
|
||||||
player = (Context_t *) malloc(sizeof(Context_t));
|
player = (Context_t *) malloc(sizeof(Context_t));
|
||||||
|
|
||||||
@@ -82,8 +87,10 @@ void cPlayback::Close(void)
|
|||||||
hal_info("%s\n", __func__);
|
hal_info("%s\n", __func__);
|
||||||
|
|
||||||
//Dagobert: movieplayer does not call stop, it calls close ;)
|
//Dagobert: movieplayer does not call stop, it calls close ;)
|
||||||
|
mutex.lock();
|
||||||
if(playing)
|
if(playing)
|
||||||
Stop();
|
Stop();
|
||||||
|
mutex.unlock();
|
||||||
|
|
||||||
if (decoders_closed)
|
if (decoders_closed)
|
||||||
{
|
{
|
||||||
@@ -765,27 +772,37 @@ cPlayback::~cPlayback()
|
|||||||
{
|
{
|
||||||
hal_info("%s\n", __func__);
|
hal_info("%s\n", __func__);
|
||||||
|
|
||||||
|
mutex.lock();
|
||||||
if (player)
|
if (player)
|
||||||
|
{
|
||||||
free(player);
|
free(player);
|
||||||
player = NULL;
|
player = NULL;
|
||||||
|
}
|
||||||
|
mutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void cPlayback::RequestAbort()
|
void cPlayback::RequestAbort()
|
||||||
{
|
{
|
||||||
if (player && player->playback && player->playback->isPlaying)
|
if (player && player->playback)
|
||||||
{
|
{
|
||||||
hal_info("%s\n", __func__);
|
hal_info("%s\n", __func__);
|
||||||
Stop();
|
mutex.lock();
|
||||||
//player->playback->abortRequested = 1;//why ?
|
|
||||||
|
if (player && player->playback && player->playback->isPlaying)
|
||||||
|
{
|
||||||
|
Stop();
|
||||||
|
player->playback->abortRequested = 1;
|
||||||
|
}
|
||||||
|
else if(player->playback->isHttp && !player->playback->isPlaying &&!player->playback->abortRequested)
|
||||||
|
{
|
||||||
|
player->playback->abortRequested = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
mutex.unlock();
|
||||||
|
|
||||||
while (player->playback->isPlaying)
|
while (player->playback->isPlaying)
|
||||||
usleep(100000);
|
usleep(100000);
|
||||||
}
|
}
|
||||||
else if(player->playback->isHttp && !player->playback->isPlaying &&!player->playback->abortRequested)
|
|
||||||
{
|
|
||||||
hal_info("%s\n", __func__);
|
|
||||||
player->playback->abortRequested = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cPlayback::IsPlaying()
|
bool cPlayback::IsPlaying()
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <OpenThreads/Mutex>
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
@@ -17,6 +18,7 @@ class cPlayback
|
|||||||
friend class CStreamInfo2;
|
friend class CStreamInfo2;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static OpenThreads::Mutex mutex;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
bool playing, first;
|
bool playing, first;
|
||||||
bool no_probe;
|
bool no_probe;
|
||||||
|
Reference in New Issue
Block a user