Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
srs
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
winlin
2015-09-14 17:17:38 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
eb578b4a39080b1889296691c8888768306c6dd9
eb578b4a
1 parent
83a9ff9f
refine the thread, set to disposed when terminate normally
隐藏空白字符变更
内嵌
并排对比
正在显示
3 个修改的文件
包含
50 行增加
和
34 行删除
trunk/src/app/srs_app_thread.cpp
trunk/src/app/srs_app_thread.hpp
trunk/src/protocol/srs_rtmp_handshake.cpp
trunk/src/app/srs_app_thread.cpp
查看文件 @
eb578b4
...
...
@@ -66,6 +66,7 @@ namespace internal {
really_terminated
=
true
;
_cid
=
-
1
;
_joinable
=
joinable
;
disposed
=
false
;
// in start(), the thread cycle method maybe stop and remove the thread itself,
// and the thread start() is waiting for the _cid, and segment fault then.
...
...
@@ -115,38 +116,15 @@ namespace internal {
void
SrsThread
::
stop
()
{
if
(
tid
)
{
loop
=
false
;
// the interrupt will cause the socket to read/write error,
// which will terminate the cycle thread.
st_thread_interrupt
(
tid
);
// when joinable, wait util quit.
if
(
_joinable
)
{
// wait the thread to exit.
int
ret
=
st_thread_join
(
tid
,
NULL
);
if
(
ret
)
{
srs_warn
(
"core: ignore join thread failed."
);
}
}
// wait the thread actually terminated.
// sometimes the thread join return -1, for example,
// when thread use st_recvfrom, the thread join return -1.
// so here, we use a variable to ensure the thread stopped.
// @remark even the thread not joinable, we must ensure the thread stopped when stop.
while
(
!
really_terminated
)
{
st_usleep
(
10
*
1000
);
if
(
really_terminated
)
{
break
;
}
srs_warn
(
"core: wait thread to actually terminated"
);
}
tid
=
NULL
;
if
(
!
tid
)
{
return
;
}
loop
=
false
;
dispose
();
tid
=
NULL
;
}
bool
SrsThread
::
can_loop
()
...
...
@@ -159,6 +137,42 @@ namespace internal {
loop
=
false
;
}
void
SrsThread
::
dispose
()
{
if
(
disposed
)
{
return
;
}
// the interrupt will cause the socket to read/write error,
// which will terminate the cycle thread.
st_thread_interrupt
(
tid
);
// when joinable, wait util quit.
if
(
_joinable
)
{
// wait the thread to exit.
int
ret
=
st_thread_join
(
tid
,
NULL
);
if
(
ret
)
{
srs_warn
(
"core: ignore join thread failed."
);
}
}
// wait the thread actually terminated.
// sometimes the thread join return -1, for example,
// when thread use st_recvfrom, the thread join return -1.
// so here, we use a variable to ensure the thread stopped.
// @remark even the thread not joinable, we must ensure the thread stopped when stop.
while
(
!
really_terminated
)
{
st_usleep
(
10
*
1000
);
if
(
really_terminated
)
{
break
;
}
srs_warn
(
"core: wait thread to actually terminated"
);
}
disposed
=
true
;
}
void
SrsThread
::
thread_cycle
()
{
int
ret
=
ERROR_SUCCESS
;
...
...
@@ -218,8 +232,8 @@ namespace internal {
handler
->
on_thread_stop
();
srs_info
(
"thread %s cycle finished"
,
_name
);
// when thread terminated normally, set the tid to NULL.
tid
=
NULL
;
// when thread terminated normally, also disposed.
disposed
=
true
;
}
void
*
SrsThread
::
thread_fun
(
void
*
arg
)
...
...
trunk/src/app/srs_app_thread.hpp
查看文件 @
eb578b4
...
...
@@ -100,6 +100,7 @@ namespace internal {
bool
really_terminated
;
bool
_joinable
;
const
char
*
_name
;
bool
disposed
;
private
:
ISrsThreadHandler
*
handler
;
int64_t
cycle_interval_us
;
...
...
@@ -154,6 +155,7 @@ namespace internal {
*/
virtual
void
stop_loop
();
private
:
virtual
void
dispose
();
virtual
void
thread_cycle
();
static
void
*
thread_fun
(
void
*
arg
);
};
...
...
trunk/src/protocol/srs_rtmp_handshake.cpp
查看文件 @
eb578b4
...
...
@@ -905,7 +905,7 @@ namespace _srs_internal
}
// client c1 time and version
time
=
::
time
(
NULL
);
time
=
(
int32_t
)
::
time
(
NULL
);
version
=
0x80000702
;
// client c1 version
// generate signature by schema
...
...
请
注册
或
登录
后发表评论