TheAMM / mpv_thumbnail_script

A Lua script to show preview thumbnails in mpv's OSC seekbar, sans external dependencies
GNU General Public License v3.0
674 stars 67 forks source link

race condition(?) crashing mpv_thumbnail_script #19

Open jgreco opened 6 years ago

jgreco commented 6 years ago

Sometimes _mpv_thumbnail_script_clientosc crashes leaving me with no OSC (but videos continue playing). This is a bit tricky to replicate since I've only noticed it happening when I'm rapidly changing the playing file with loadfile over JSON IPC.

Seemingly what happens is mpv starts to load one file, then shortly later (within a second or so) another loadfile command comes through. It seems to be timing sensitive since rapidly sending back to back loadfile commands won't always trigger this, but I can usually trigger the bug after a few seconds of trying.

In the following logfile snippet there are two loadfile commands initiated by IPC, the first at [0.026] and the second at [0.594]. Shortly after the second at [0.632], mpv_thumbnail_script_client_osc crashes:

[   0.026][v][ipc_0] Client connected
[   0.026][d][cplayer] Run command: loadfile, flags=0, args=[/private/tmp/mpv-test/su-25.webm, replace, ]
...
[   0.045][d][mpv_thumbnail_script_server_2] Loading lua script /Users/john/.config/mpv/scripts/mpv_thumbnail_script_server-2.lua...
[   0.046][d][mpv_thumbnail_script_server_2] loading mp.defaults
[   0.047][d][mpv_thumbnail_script_server_2] loading file /Users/john/.config/mpv/scripts/mpv_thumbnail_script_server-2.lua
[   0.049][d][mpv_thumbnail_script_server_2] reading options for mpv_thumbnail_script 
[   0.054][d][mpv_thumbnail_script_client_osc] Loading lua script /Users/john/.config/mpv/scripts/mpv_thumbnail_script_client_osc.lua...
[   0.054][d][mpv_thumbnail_script_client_osc] loading mp.defaults
[   0.055][d][mpv_thumbnail_script_client_osc] loading file /Users/john/.config/mpv/scripts/mpv_thumbnail_script_client_osc.lua
[   0.064][d][mpv_thumbnail_script_client_osc] reading options for mpv_thumbnail_script 
[   0.064][d][mpv_thumbnail_script_client_osc] reading options for osc 
[   0.064][v][mpv_thumbnail_script_client_osc] lua-settings/osc.conf not found. 
[   0.065][d][mpv_thumbnail_script_client_osc] osc_init 
[   0.076][d][mpv_thumbnail_script_server_1] Loading lua script /Users/john/.config/mpv/scripts/mpv_thumbnail_script_server-1.lua...
[   0.076][d][mpv_thumbnail_script_server_1] loading mp.defaults
[   0.077][d][mpv_thumbnail_script_server_1] loading file /Users/john/.config/mpv/scripts/mpv_thumbnail_script_server-1.lua
[   0.080][d][mpv_thumbnail_script_server_1] reading options for mpv_thumbnail_script 
[   0.089][v][file] Opening /private/tmp/mpv-test/su-25.webm
[   0.104][d][file] Stream opened successfully.
[   0.150][d][mpv_thumbnail_script_server_2] Announcing self to master... 
[   0.150][d][cplayer] Run command: script-message, flags=0, args=[mpv_thumbnail_script-worker, mpv_thumbnail_script_server_2]
[   0.150][d][mpv_thumbnail_script_client_osc] Registered worker mpv_thumbnail_script_server_2 
[   0.150][d][cplayer] Run command: script-message-to, flags=0, args=[mpv_thumbnail_script_server_2, mpv_thumbnail_script-slaved]
[   0.150][d][mpv_thumbnail_script_server_2] Successfully registered with master 
[   0.174][v][cplayer] Opening done: /private/tmp/mpv-test/su-25.webm
[   0.181][d][mpv_thumbnail_script_server_1] Announcing self to master... 
[   0.245][v][cplayer] Starting playback...
[   0.245][d][cplayer] Run command: script-message, flags=0, args=[mpv_thumbnail_script-worker, mpv_thumbnail_script_server_1]
[   0.246][d][mpv_thumbnail_script_client_osc] Registered worker mpv_thumbnail_script_server_1 
[   0.246][d][cplayer] Run command: script-message-to, flags=0, args=[mpv_thumbnail_script_server_1, mpv_thumbnail_script-slaved]
[   0.246][d][mpv_thumbnail_script_server_1] Successfully registered with master 
[   0.593][d][cplayer] Run command: script-message, flags=0, args=[thumbnails-generator-broadcast, gallery_thumbgen_2]
[   0.594][d][cplayer] Run command: script-message, flags=0, args=[thumbnails-generator-broadcast, gallery_thumbgen_1]
[   0.594][d][cplayer] Run command: loadfile, flags=0, args=[/private/tmp/mpv-test/pro-bicycling.webm, replace, ]
[   0.594][d][cplayer] Run command: script-message, flags=0, args=[thumbnails-generator-broadcast, gallery_thumbgen_1]
[   0.594][d][cplayer] Run command: script-message, flags=0, args=[thumbnails-generator-broadcast, gallery_thumbgen_2]
[   0.595][d][mpv_thumbnail_script_client_osc] Gathering video/thumbnail state 
[   0.595][d][cplayer] Run command: script-binding, flags=9, args=[mpv_thumbnail_script_client_osc/__keybinding2]
[   0.595][d][cplayer] Run command: seek, flags=9, args=[60.000000, relative, unused]
[   0.595][d][cplayer] Run command: seek, flags=9, args=[60.000000, relative, unused]
[   0.595][v][mkv] queuing seek to 120.000000
[   0.595][v][mkv] cached range 0: 0.000000 <-> 7.200000
[   0.595][v][cplayer] EOF code: 3  
[   0.595][v][cplayer] Running hook: peerflix_hook/on_unload
[   0.595][d][cplayer] Run command: hook-ack, flags=0, args=[on_unload]
[   0.595][v][vd] Uninit video.
[   0.628][d][cache] request seek: 0 <= to=920807 (cur=917504) <= 983040  
[   0.628][v][cache] Terminating cache...
[   0.628][v][cache] Cache exiting...
[   0.632][v][cplayer] finished playback, success (reason 2)
[   0.632][i][cplayer] 
[   0.632][i][cplayer] Auto-loading profile 'extension.webm'
[   0.632][d][cplayer] Setting option 'loop-file' = 'inf' (flags = 116)
[   0.632][i][cplayer] Playing: /private/tmp/mpv-test/pro-bicycling.webm
[   0.632][v][cplayer] Running hook: ytdl_hook/on_load
[   0.632][d][ytdl_hook] script running time: 4.1000000000069e-05 seconds 
[   0.632][d][cplayer] Run command: hook-ack, flags=0, args=[on_load]
[   0.632][w][mpv_thumbnail_script_client_osc] 
[   0.632][w][mpv_thumbnail_script_client_osc] stack traceback:
[   0.633][w][mpv_thumbnail_script_client_osc]  ...nfig/mpv/scripts/mpv_thumbnail_script_client_osc.lua:942: in function 'get_thumbnail_size'
[   0.633][w][mpv_thumbnail_script_client_osc]  ...nfig/mpv/scripts/mpv_thumbnail_script_client_osc.lua:887: in function 'update_state'
[   0.633][w][mpv_thumbnail_script_client_osc]  ...nfig/mpv/scripts/mpv_thumbnail_script_client_osc.lua:869: in function 'on_video_change'
[   0.633][w][mpv_thumbnail_script_client_osc]  ...nfig/mpv/scripts/mpv_thumbnail_script_client_osc.lua:1227: in function 'prop'
[   0.633][w][mpv_thumbnail_script_client_osc]  mp.defaults:365: in function 'handler'
[   0.633][w][mpv_thumbnail_script_client_osc]  mp.defaults:459: in function 'call_event_handlers'
[   0.633][w][mpv_thumbnail_script_client_osc]  mp.defaults:496: in function 'dispatch_events'
[   0.633][w][mpv_thumbnail_script_client_osc]  mp.defaults:452: in function <mp.defaults:451>
[   0.633][w][mpv_thumbnail_script_client_osc]  [C]: ?
[   0.633][w][mpv_thumbnail_script_client_osc]  [C]: ?
[   0.633][v][cplayer] Running hook: txt_hook/on_load
[   0.633][f][mpv_thumbnail_script_client_osc] Lua error: ...nfig/mpv/scripts/mpv_thumbnail_script_client_osc.lua:942: attempt to index local 'video_dec_params' (a nil value)
[   0.633][v][file] Opening /private/tmp/mpv-test/pro-bicycling.webm
[   0.636][v][mpv_thumbnail_script_client_osc] Exiting...
tonycpsu commented 4 years ago

I'm getting this one a lot during normal use, even when I'm not doing anything crazy with external scripts. Just changing videos a few times triggers it.

blankname commented 4 years ago

Try #54