rtsp: fix deadlock when finishing stream

This commit is contained in:
Kamil Trzcinski 2023-03-08 19:14:41 +01:00
parent 42dbdb7345
commit 538955ee30

View File

@ -47,21 +47,21 @@ public:
void doGetNextFrame()
{
{
std::unique_lock streams_lock(rtsp_streams_lock);
if (!fHaveStartedReading) {
std::unique_lock lk(rtsp_streams_lock);
rtsp_streams.insert(this);
fHaveStartedReading = True;
}
}
send_buffer();
if (send_buffer()) {
afterGetting(this);
}
}
void doStopGettingFrames()
{
{
std::unique_lock streams_lock(rtsp_streams_lock);
if (fHaveStartedReading) {
std::unique_lock lk(rtsp_streams_lock);
rtsp_streams.erase(this);
fHaveStartedReading = false;
}
@ -144,8 +144,6 @@ public:
rtsp_options->truncated++;
set_buffer(NULL);
}
afterGetting(this);
return true;
}
@ -236,7 +234,9 @@ static void rtsp_frame_finish()
{
std::unique_lock lk(rtsp_streams_lock);
for (auto *stream : rtsp_streams) {
stream->send_buffer();
if (stream->send_buffer()) {
stream->afterGetting(stream);
}
}
if (rtsp_options) {
rtsp_options->clients = rtsp_streams.size();