On Sat, Jun 23, 2018 at 01:27:54PM +0100, Stuart Henderson wrote:
> moved from tech@
> 
> On 2018/06/23 13:44, Hiltjo Posthuma wrote:
> > On Fri, Mar 16, 2018 at 02:40:00PM +0100, Hiltjo Posthuma wrote:
> > > On Fri, Mar 16, 2018 at 02:29:24PM +0100, Hiltjo Posthuma wrote:
> > > > On Thu, Mar 15, 2018 at 03:27:47PM +0100, Martin Pieuchot wrote:
> > > > > On 05/03/18(Mon) 21:26, Hiltjo Posthuma wrote:
> > > > > > >  [...]
> > > > > > > I tried your patch on a source build of about 25 februari on 
> > > > > > > amd64. I still
> > > > > > > notice mpv hanging when I try to close it or when the video ends.
> > > > > 
> > > > > Thanks for reporting.  This is a different issue.
> > > > > 
> > > > > > > Let me know how/if I can help you further with testing.
> > > > > 
> > > > > Could you tell me how to reproduce the problem?
> > > > > 
> > > > > > Updated to source of ~4 March:
> > > > > > 
> > > > > > OpenBSD ren.laptop 6.3 GENERIC.MP#0 amd64
> > > > > > 
> > > > > > When I do a backtrace on the hanged mpv I get:
> > > > > > 
> > > > > > 
> > > > > > $ gdb mpv pid
> > > > > > $ bt
> > > > > 
> > > > > Could you get the backtrace of all the threads?
> > > > > 
> > > > > Something like: 'thr apply all bt'
> > > > > 
> > > > > > #0  _thread_sys___thrsleep () at -:3
> > > > > > #1  0x0000117420965ea4 in _sem_wait (sem=0x1174219ffc40, 
> > > > > > tryonly=564132932, abstime=0x0,
> > > > > >     delayed_cancel=0x11738fa402f0) at 
> > > > > > /usr/src/lib/librthread/rthread_sem.c:74
> > > > > > #2  0x00001174209650bf in pthread_join (thread=0x1174219ffc40, 
> > > > > > retval=0x0)
> > > > > >     at /usr/src/lib/librthread/rthread.c:304
> > > > > > #3  0x00001173ec0a9d5b in SDL_WaitThread_REAL () from 
> > > > > > /usr/local/lib/libSDL2.so.0.4
> > > > > > #4  0x00001173ec05b64a in close_audio_device () from 
> > > > > > /usr/local/lib/libSDL2.so.0.4
> > > > > > #5  0x00001173ec05a1e2 in SDL_AudioQuit_REAL () from 
> > > > > > /usr/local/lib/libSDL2.so.0.4
> > > > > > #6  0x00001173ec05703b in SDL_QuitSubSystem_REAL () from 
> > > > > > /usr/local/lib/libSDL2.so.0.4
> > > > > > #7  0x000011713bf135e9 in ao_uninit (ao=0x11740b004740) at 
> > > > > > ../audio/out/ao.c:336
> > > > > > #8  0x000011713bf561fe in uninit_audio_out (mpctx=0x1173a2d8b840) 
> > > > > > at ../player/audio.c:280
> > > > > > #9  0x000011713bf6efd2 in mp_destroy (mpctx=0x1173a2d8b840) at 
> > > > > > ../player/main.c:166
> > > > > > #10 0x000011713bf6fbe1 in mpv_main (argc=Variable "argc" is not 
> > > > > > available.
> > > > > > ) at ../player/main.c:243
> > > > > > #11 0x000011713bf03156 in _start () from /usr/local/bin/mpv
> > > > > > #12 0x0000000000000000 in ?? ()
> > > > > > (gdb)
> > > > > 
> > > > 
> > > > Hi,
> > > > 
> > > > I rebuild base and xenocara from source yesterday and rebuild and 
> > > > reinstalled
> > > > mpv.
> > > > 
> > > > The hang always happens after a video ends. I've not had any issues 
> > > > with other
> > > > programs I think. When the hang happens mpv doesn't response to SIGTERM,
> > > > so SIGKILL is needed.
> > > > 
> > > 
> > > To clarify a bit more:
> > > 
> > > The hang (the mpv window doesn't respond anymore) >>when it happens<< 
> > > always
> > > happens after a video ends so far.
> > > 
> > > I'm not able to provide a test-case that reproduces it consistently yet.
> > > 
> > 
> > Hi,
> > 
> > Is anyone using mpv also able to reproduce the hang issue?
> > 
> > I have tried to study the libpthread and rthread code on -current, but it is
> > not my area of expertise. I think the issue happened before the recent futex
> > code changes also.
> > 
> > Another issue (that might be related):
> > 
> > The CPU usage is extremely high on mpv compared to ffplay or mplayer.  With 
> > a
> > ktrace on a 10 second video it has 1.3million gettimeofday() calls.  The mpv
> > port could be updated to detect it can use the 
> > clock_gettime(CLOCK_MONOTONIC,
> > ...).  mplayer and ffplay don't use threads for waiting, so my guess it is 
> > also
> > a threading issue.
> > 
> > The version is ports is also about 2 years old and could use some love by 
> > the
> > maintainer.
> 
> I'm not seeing the hang, but I know why it's using gettimeofday, here's a
> patch to use clock_gettime instead.
> 
> OK?
> 
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/multimedia/mpv/Makefile,v
> retrieving revision 1.39
> diff -u -p -r1.39 Makefile
> --- Makefile  20 Jan 2018 11:42:59 -0000      1.39
> +++ Makefile  23 Jun 2018 12:26:51 -0000
> @@ -10,7 +10,7 @@ COMMENT =           movie player based on MPlayer
>  GH_ACCOUNT =         mpv-player
>  GH_PROJECT =         mpv
>  GH_TAGNAME =         v0.22.0
> -REVISION =           1
> +REVISION =           2
>  
>  CATEGORIES =         multimedia x11
>  
> Index: patches/patch-osdep_timer-linux_c
> ===================================================================
> RCS file: patches/patch-osdep_timer-linux_c
> diff -N patches/patch-osdep_timer-linux_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-osdep_timer-linux_c 23 Jun 2018 12:26:51 -0000
> @@ -0,0 +1,17 @@
> +$OpenBSD$
> +
> +OpenBSD doesn't define _POSIX_TIMERS because we are missing some of the
> +required clocks, but we do have enough for mpv.
> +
> +Index: osdep/timer-linux.c
> +--- osdep/timer-linux.c.orig
> ++++ osdep/timer-linux.c
> +@@ -19,6 +19,8 @@
> +  */
> + 
> + #include <unistd.h>
> ++#undef _POSIX_TIMERS
> ++#define _POSIX_TIMERS 1
> + #include <stdlib.h>
> + #include <time.h>
> + #include <sys/time.h>
> Index: patches/patch-osdep_timer_c
> ===================================================================
> RCS file: patches/patch-osdep_timer_c
> diff -N patches/patch-osdep_timer_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-osdep_timer_c       23 Jun 2018 12:26:51 -0000
> @@ -0,0 +1,17 @@
> +$OpenBSD$
> +
> +OpenBSD doesn't define _POSIX_TIMERS because we are missing some of the
> +required clocks, but we do have enough for mpv.
> +
> +Index: osdep/timer.c
> +--- osdep/timer.c.orig
> ++++ osdep/timer.c
> +@@ -19,6 +19,8 @@
> + #include <pthread.h>
> + #include <time.h>
> + #include <unistd.h>
> ++#undef _POSIX_TIMERS
> ++#define _POSIX_TIMERS 1
> + #include <sys/time.h>
> + #include <limits.h>
> + #include <assert.h>
> Index: patches/patch-stream_tvi_v4l2_c
> ===================================================================
> RCS file: patches/patch-stream_tvi_v4l2_c
> diff -N patches/patch-stream_tvi_v4l2_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-stream_tvi_v4l2_c   23 Jun 2018 12:26:51 -0000
> @@ -0,0 +1,17 @@
> +$OpenBSD$
> +
> +OpenBSD doesn't define _POSIX_TIMERS because we are missing some of the
> +required clocks, but we do have enough for mpv.
> +
> +Index: stream/tvi_v4l2.c
> +--- stream/tvi_v4l2.c.orig
> ++++ stream/tvi_v4l2.c
> +@@ -44,6 +44,8 @@ known issues:
> + #include <sys/time.h>
> + #include <sys/types.h>
> + #include <unistd.h>
> ++#undef _POSIX_TIMERS
> ++#define _POSIX_TIMERS 1
> + #include <math.h>
> + #if HAVE_SYS_VIDEOIO_H
> + #include <sys/videoio.h>

Hi,

I tested the patch and built mpv and ran a ktrace. Now it uses clock_gettime.

Tested on amd64.

Thanks,

-- 
Kind regards,
Hiltjo

Reply via email to