rtsp: fix deadlock when finishing stream
This commit is contained in:
parent
42dbdb7345
commit
538955ee30
@ -47,21 +47,21 @@ public:
|
|||||||
|
|
||||||
void doGetNextFrame()
|
void doGetNextFrame()
|
||||||
{
|
{
|
||||||
{
|
if (!fHaveStartedReading) {
|
||||||
std::unique_lock streams_lock(rtsp_streams_lock);
|
std::unique_lock lk(rtsp_streams_lock);
|
||||||
if (!fHaveStartedReading) {
|
rtsp_streams.insert(this);
|
||||||
rtsp_streams.insert(this);
|
fHaveStartedReading = True;
|
||||||
fHaveStartedReading = True;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
send_buffer();
|
if (send_buffer()) {
|
||||||
|
afterGetting(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void doStopGettingFrames()
|
void doStopGettingFrames()
|
||||||
{
|
{
|
||||||
{
|
if (fHaveStartedReading) {
|
||||||
std::unique_lock streams_lock(rtsp_streams_lock);
|
std::unique_lock lk(rtsp_streams_lock);
|
||||||
rtsp_streams.erase(this);
|
rtsp_streams.erase(this);
|
||||||
fHaveStartedReading = false;
|
fHaveStartedReading = false;
|
||||||
}
|
}
|
||||||
@ -144,8 +144,6 @@ public:
|
|||||||
rtsp_options->truncated++;
|
rtsp_options->truncated++;
|
||||||
set_buffer(NULL);
|
set_buffer(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
afterGetting(this);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,7 +234,9 @@ static void rtsp_frame_finish()
|
|||||||
{
|
{
|
||||||
std::unique_lock lk(rtsp_streams_lock);
|
std::unique_lock lk(rtsp_streams_lock);
|
||||||
for (auto *stream : rtsp_streams) {
|
for (auto *stream : rtsp_streams) {
|
||||||
stream->send_buffer();
|
if (stream->send_buffer()) {
|
||||||
|
stream->afterGetting(stream);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (rtsp_options) {
|
if (rtsp_options) {
|
||||||
rtsp_options->clients = rtsp_streams.size();
|
rtsp_options->clients = rtsp_streams.size();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user