1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00
srs/trunk
Winlin 8d6b882034 HLS: Fix on_hls and hls_dispose critical zone issue. v5.0.174 (#3781)
on_hls and hls_dispose are two coroutines, with potential race
conditions. That is, during on_hls, if the API Server being accessed is
slower, it will switch to the hls_dispose coroutine to start cleaning
up. However, when the API Server is processing the slice, a situation
may occur where the slice does not exist, resulting in the following
log:

```
[2023-08-22 12:03:20.309][WARN][40][x5l48q7b][11] ignore task failed code=4005(HttpStatus)(Invalid HTTP status code) : callback on_hls http://localhost:2024/terraform/v1/hooks/srs/hls : http: post http://localhost:2024/terraform/v1/hooks/srs/hls with {"server_id":"vid-5d7dxn8","service_id":"cu153o7g","action":"on_hls","client_id":"x5l48q7b","ip":"172.17.0.1","vhost":"__defaultVhost__","app":"live","tcUrl":"srt://172.17.0.2/live","stream":"stream-44572-2739617660809856576","param":"secret=1ed8e0ffbc53439c8fc8da30ab8c19f0","duration":4.57,"cwd":"/usr/local/srs-stack/platform","file":"./objs/nginx/html/live/stream-44572-2739617660809856576-1.ts","url":"live/stream-44572-2739617660809856576-1.ts","m3u8":"./objs/nginx/html/live/stream-44572-2739617660809856576.m3u8","m3u8_url":"live/stream-44572-2739617660809856576.m3u8","seq_no":1,"stream_url":"/live/stream-44572-2739617660809856576","stream_id":"vid-0n9zoz3"}, status=500, res=invalid ts file ./objs/nginx/html/live/stream-44572-2739617660809856576-1.ts: stat ./objs/nginx/html/live/stream-44572-2739617660809856576-1.ts: no such file or directory
thread [40][x5l48q7b]: call() [./src/app/srs_app_hls.cpp:122][errno=11]
thread [40][x5l48q7b]: on_hls() [./src/app/srs_app_http_hooks.cpp:401][errno=11]
thread [40][x5l48q7b]: do_post() [./src/app/srs_app_http_hooks.cpp:638][errno=11]

[error] 2023/08/22 12:03:20.076984 [52][1001] Serve /terraform/v1/hooks/srs/hls failed, err is stat ./objs/nginx/html/live/stream-44572-2739617660809856576-1.ts: no such file or directory
invalid ts file ./objs/nginx/html/live/stream-44572-2739617660809856576-1.ts
main.handleOnHls.func1.1
	/g/platform/srs-hooks.go:684
main.handleOnHls.func1
	/g/platform/srs-hooks.go:720
net/http.HandlerFunc.ServeHTTP
	/usr/local/go/src/net/http/server.go:2084
net/http.(*ServeMux).ServeHTTP
	/usr/local/go/src/net/http/server.go:2462
net/http.serverHandler.ServeHTTP
	/usr/local/go/src/net/http/server.go:2916
net/http.(*conn).serve
	/usr/local/go/src/net/http/server.go:1966
runtime.goexit
	/usr/local/go/src/runtime/asm_amd64.s:1571
```

Similarly, when stopping the stream, on_hls will also be called to
handle the last slice. If the API Server is slower at this time, it will
enter hls_dispose and call unpublish repeatedly. Since the previous
unpublish is still blocked in on_hls, the following interference log
will appear:

```
[2023-08-22 12:03:18.748][INFO][40][6498088c] hls cycle to dispose hls /live/stream-44572-2739617660809856576, timeout=10000000ms
[2023-08-22 12:03:18.752][WARN][40][6498088c][115] flush audio ignored, for segment is not open.
[2023-08-22 12:03:18.752][WARN][40][6498088c][115] ignore the segment close, for segment is not open.
```

Although this log will not cause problems, it can interfere with
judgment.

The solution is to add an 'unpublishing' status. If it is in the
'unpublishing' status, then do not clean up the slices.

---------

Co-authored-by: Haibo Chen <495810242@qq.com>
2023-08-28 11:43:14 +08:00
..
3rdparty Upgrade jquery from 1.10.2 to 1.12.2 (#3571) 2023-06-30 06:29:50 +08:00
auto Bugfix: Eliminate the redundant declaration of the _srs_rtc_manager variable. v5.0.169 (#3699) 2023-07-26 20:17:23 +08:00
conf WebRTC: Support config the bitrate of transcoding AAC to Opus. v5.0.167, v6.0.60 (#3515) 2023-07-18 11:11:49 +08:00
doc HLS: Fix on_hls and hls_dispose critical zone issue. v5.0.174 (#3781) 2023-08-28 11:43:14 +08:00
etc/init.d Squash: Fix bugs 2022-01-13 18:26:28 +08:00
gdb ST: Support show coroutines. 2020-12-10 11:36:24 +08:00
ide/srs_clion Disable CLS and APM by default. v5.0.101 2022-12-03 18:35:41 +08:00
modules Moduels: Refine the description 2021-04-21 11:18:35 +08:00
packaging Windows: Refine cygwin pipeline (#3260) 2022-11-21 14:32:26 +08:00
research Fix issue of srs-player failing to play HTTP-FLV. v5.0.165 2023-07-09 17:54:51 +08:00
scripts Package script support extra options. v5.0.102 2022-12-03 18:56:21 +08:00
src HLS: Fix on_hls and hls_dispose critical zone issue. v5.0.174 (#3781) 2023-08-28 11:43:14 +08:00
usr/lib/systemd/system Squash: Support RPM. Fix bugs. 2021-11-04 07:37:17 +08:00
.gitignore For #2136: API: Cleanup no active streams for statistics. v5.0.42 2022-08-19 19:45:19 +08:00
AUTHORS.md Update new authors. 2022-12-31 12:22:05 +08:00
AUTHORS.txt Update AUTHORS 2021-08-25 07:43:35 +08:00
configure Support include empty config file. v5.0.173 (#3768) 2023-08-28 10:58:37 +08:00
Dockerfile.builds Disable CLS and APM by default. v5.0.101 2022-12-03 18:35:41 +08:00
Dockerfile.cov GB28181: Enable regression test for gb28181. v5.0.122 2022-12-31 19:36:49 +08:00
Dockerfile.pkg GB28181: Enable GB for CentOS 7 package. v5.0.103 2022-12-03 18:56:55 +08:00
Dockerfile.test GB28181: Enable regression test for gb28181. v5.0.122 2022-12-31 19:36:49 +08:00