Skip to content

speaker forwarding may cause server to hang #669

@totaam

Description

@totaam

Issue migrated from trac ticket # 669

component: sound | priority: critical | resolution: fixed

2014-09-04 10:42:32: onlyjob created the issue


Attaching/disconnecting with speaker forwarding sometimes leaves server in unresponsive state.
Here are fragments ofom server log taken with "-d sound":

Server started:

2014-09-04 19:10:39,969 xpra server version 0.14.4 (7467)
2014-09-04 19:10:39,969 running with pid 9207
E: [pulseaudio] pid.c: Daemon already running.
2014-09-04 19:10:40,012 child 'pulseaudio' with pid 9219 has terminated
2014-09-04 19:10:40,098 xpra is ready.
2014-09-04 19:10:41,965 Warning: pulseaudio has terminated. Either fix the pulseaudio command line or use --no-pulseaudio to avoid this warning.
2014-09-04 19:10:41,965  usually, only a single pulseaudio instance can be running for each user account, and one may be running already

Client attached and disconnected (1st time, all good):

2014-09-04 19:11:28,295 new_sound_buffer(<SoundSource object at 0x7f2fea99f7d0 (xpra+sound+src+SoundSource at 0x237fec0)>, 60, {'duration': 500000000L, 'timestamp': 285000
00000L}) source=<SoundSource object at 0x7f2fea99f7d0 (xpra+sound+src+SoundSource at 0x237fec0)>, suspended=False, sequence=-1
2014-09-04 19:11:28,793 new_sound_buffer(<SoundSource object at 0x7f2fea99f7d0 (xpra+sound+src+SoundSource at 0x237fec0)>, 60, {'duration': 500000000L, 'timestamp': 290000
00000L}) source=<SoundSource object at 0x7f2fea99f7d0 (xpra+sound+src+SoundSource at 0x237fec0)>, suspended=False, sequence=-1
2014-09-04 19:11:29,005 Connection lost
2014-09-04 19:11:29,006 stop_sending_sound() sound_source=<SoundSource object at 0x7f2fea99f7d0 (xpra+sound+src+SoundSource at 0x237fec0)>
2014-09-04 19:11:29,006 xpra client disconnected.
2014-09-04 19:11:29,006 stop_sending_sound_thread(())
2014-09-04 19:11:29,007 SoundPipeline.cleanup()
2014-09-04 19:11:29,007 SoundPipeline.stop()
2014-09-04 19:11:29,008 state changed: <gst.Message GstMessageState, old-state=(GstState)GST_STATE_PLAYING, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)G
ST_STATE_VOID_PENDING; from wavpackenc0 at 0x2659530>
2014-09-04 19:11:29,008 state changed: <gst.Message GstMessageState, old-state=(GstState)GST_STATE_PLAYING, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)G
ST_STATE_VOID_PENDING; from volume at 0x26594b0>
2014-09-04 19:11:29,008 state changed: <gst.Message GstMessageState, old-state=(GstState)GST_STATE_PLAYING, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)G
ST_STATE_VOID_PENDING; from audioconvert0 at 0x2659430>
2014-09-04 19:11:29,008 state changed: <gst.Message GstMessageState, old-state=(GstState)GST_STATE_PLAYING, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)G
ST_STATE_VOID_PENDING; from pulsesrc0 at 0x2659330>
2014-09-04 19:11:29,008 new-state=PAUSED
2014-09-04 19:11:29,009 SoundPipeline.stop() done
2014-09-04 19:11:29,009 SoundPipeline.cleanup() done
2014-09-04 19:11:29,009 stop_sending_sound_thread(()) done

Client attached and disconnected (2nd try, still good):

2014-09-04 19:11:47,894 new_sound_buffer(<SoundSource object at 0x7f2fea99f870 (xpra+sound+src+SoundSource at 0x7f2fa8002500)>, 60, {'duration': 500000000L, 'timestamp': 7
000000000L}) source=<SoundSource object at 0x7f2fea99f870 (xpra+sound+src+SoundSource at 0x7f2fa8002500)>, suspended=False, sequence=-1
2014-09-04 19:11:48,393 new_sound_buffer(<SoundSource object at 0x7f2fea99f870 (xpra+sound+src+SoundSource at 0x7f2fa8002500)>, 60, {'duration': 500000000L, 'timestamp': 7
500000000L}) source=<SoundSource object at 0x7f2fea99f870 (xpra+sound+src+SoundSource at 0x7f2fa8002500)>, suspended=False, sequence=-1
2014-09-04 19:11:48,841 client Protocol(SocketConnection(/home/hawk/.xpra/debstor-22)) has requested disconnection: exit on signal SIGINT
2014-09-04 19:11:48,841 Disconnecting client Protocol(SocketConnection(/home/hawk/.xpra/debstor-22)): client request
2014-09-04 19:11:48,842 stop_sending_sound() sound_source=<SoundSource object at 0x7f2fea99f870 (xpra+sound+src+SoundSource at 0x7f2fa8002500)>
2014-09-04 19:11:48,842 stop_sending_sound_thread(())
2014-09-04 19:11:48,842 SoundPipeline.cleanup()
2014-09-04 19:11:48,842 xpra client disconnected.
2014-09-04 19:11:48,843 SoundPipeline.stop()
2014-09-04 19:11:48,844 state changed: <gst.Message GstMessageState, old-state=(GstState)GST_STATE_PLAYING, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)G
ST_STATE_VOID_PENDING; from wavpackenc1 at 0x7f2fa4001ec0>
2014-09-04 19:11:48,844 state changed: <gst.Message GstMessageState, old-state=(GstState)GST_STATE_PLAYING, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)G
ST_STATE_VOID_PENDING; from volume at 0x7f2fa4001f40>
2014-09-04 19:11:48,844 state changed: <gst.Message GstMessageState, old-state=(GstState)GST_STATE_PLAYING, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)G
ST_STATE_VOID_PENDING; from audioconvert1 at 0x2674850>
2014-09-04 19:11:48,844 state changed: <gst.Message GstMessageState, old-state=(GstState)GST_STATE_PLAYING, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)G
ST_STATE_VOID_PENDING; from pulsesrc1 at 0x26748d0>
2014-09-04 19:11:48,845 new-state=PAUSED
2014-09-04 19:11:48,845 state changed: <gst.Message GstMessageState, old-state=(GstState)GST_STATE_PLAYING, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)G
ST_STATE_READY; from sink at 0x26749d0>
2014-09-04 19:11:48,845 SoundPipeline.stop() done
2014-09-04 19:11:48,845 SoundPipeline.cleanup() done
2014-09-04 19:11:48,845 stop_sending_sound_thread(()) done

3rd attach, renders empty windows:

2014-09-04 19:11:58,224 New connection received: SocketConnection(/home/hawk/.xpra/debstor-22)
2014-09-04 19:12:02,211 Handshake complete; enabling connection
2014-09-04 19:12:02,215 pulseaudio id=, server=, sound decoders=['wavpack'], sound encoders=['wavpack', 'flac', 'wav', 'speex'], receive=True, send=True
2014-09-04 19:12:02,216 Python/Gtk2 Linux client version 0.14.4 connected from 'deblab' as 'hawk' ('hawk')
2014-09-04 19:12:02,216 client supplied an mmap_file: /tmp/xpra.xdWpza.mmap but we cannot find it
2014-09-04 19:12:02,216 using rgb as primary encoding, also available: h264, vp8, png, png/P, png/L, webp, rgb24, jpeg, rgb32
2014-09-04 19:12:02,216 client root window size is 4400x2560 with 1 displays:
2014-09-04 19:12:02,216   ':0.0' (1161x675 mm) workarea: 4400x2527 at 0x33
2014-09-04 19:12:02,216     DisplayPort-1 1280x1024 at 0x1536 (360x270 mm)
2014-09-04 19:12:02,217     DVI-0 1440x2560 at 1280x0 (597x336 mm)
2014-09-04 19:12:02,217     DisplayPort-0 1680x1050 at 2720x1510 (474x296 mm)
2014-09-04 19:12:02,217 best resolution matching 4400x2560 is unchanged: 5120x3200
2014-09-04 19:12:02,219 setting key repeat rate from client: 660ms delay / 40ms interval
2014-09-04 19:12:02,221 keyboard mapping already configured (skipped)
2014-09-04 19:12:02,232 pactl_output('list',) returned 0
2014-09-04 19:12:02,242 pactl_output('list',) returned 0
2014-09-04 19:12:02,252 pactl_output('list',) returned 0
2014-09-04 19:12:02,264 pactl_output('list',) returned 0
2014-09-04 19:12:02,314 sound_control(start, ('wavpack',))
2014-09-04 19:12:02,314 start_sending_sound(wavpack)
2014-09-04 19:12:02,314 using sound codec wavpack
2014-09-04 19:12:02,327 pactl_output('stat',) returned 0
2014-09-04 19:12:02,327 get_pactl_stat_line(Server String:)=/tmp/pulse-8XiBnTK3trYQ/native
2014-09-04 19:12:02,328 start sound, remote pulseaudio server=, local pulseaudio server=/tmp/pulse-8XiBnTK3trYQ/native
2014-09-04 19:12:02,328 start sound, client id=, server id=
2014-09-04 19:12:02,341 pactl_output('list',) returned 0
2014-09-04 19:12:02,341 found pulseaudio monitor devices: {'auto_null.monitor': 'Monitor of Dummy Output'}
2014-09-04 19:12:02,353 pactl_output('set-source-mute', 'auto_null.monitor', '0') returned 0
2014-09-04 19:12:02,354 set_source_mute: output=
2014-09-04 19:12:02,354 pipeline elements=['pulsesrc device=auto_null.monitor', 'audioconvert', 'volume name=volume volume=1.0', 'wavpackenc', None, 'appsink name=sink']
2014-09-04 19:12:02,354 pipeline=pulsesrc device=auto_null.monitor ! audioconvert ! volume name=volume volume=1.0 ! wavpackenc ! appsink name=sink
2014-09-04 19:12:02,357 starting sound capture using pulseaudio device: Monitor of Dummy Output
2014-09-04 19:12:02,357 start_sending_sound() sound source=<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>
2014-09-04 19:12:02,357 SoundPipeline.start()
2014-09-04 19:12:02,362 SoundPipeline.start() done
2014-09-04 19:12:02,363 state changed: <gst.Message GstMessageState, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_S
TATE_VOID_PENDING; from sink at 0x26749d0>
2014-09-04 19:12:05,188 new preroll0: 112 bytes
2014-09-04 19:12:05,189 new_sound_buffer(<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, 112, {'duration': 500000000L, 'timestamp': 
0L}) source=<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, suspended=False, sequence=-1
2014-09-04 19:12:05,189 new_sound_buffer(<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, 112, {'duration': 500000000L, 'timestamp': 
0L}) source=<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, suspended=False, sequence=-1
2014-09-04 19:12:05,688 new_sound_buffer(<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, 60, {'duration': 500000000L, 'timestamp': 5
00000000L}) source=<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, suspended=False, sequence=-1
2014-09-04 19:12:06,186 new_sound_buffer(<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, 60, {'duration': 500000000L, 'timestamp': 1
000000000L}) source=<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, suspended=False, sequence=-1
2014-09-04 19:12:06,685 new_sound_buffer(<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, 60, {'duration': 500000000L, 'timestamp': 1
500000000L}) source=<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, suspended=False, sequence=-1

After disconnect server keeps logging:

2014-09-04 19:12:57,173 new_sound_buffer(<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, 60, {'duration': 500000000L, 'timestamp': 5
2000000000L}) source=<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, suspended=False, sequence=-1
2014-09-04 19:12:57,682 new_sound_buffer(<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, 60, {'duration': 500000000L, 'timestamp': 5
2500000000L}) source=<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, suspended=False, sequence=-1
2014-09-04 19:12:58,181 new_sound_buffer(<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, 60, {'duration': 500000000L, 'timestamp': 5
3000000000L}) source=<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, suspended=False, sequence=-1
2014-09-04 19:12:58,680 new_sound_buffer(<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, 60, {'duration': 500000000L, 'timestamp': 5
3500000000L}) source=<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, suspended=False, sequence=-1
2014-09-04 19:12:59,178 new_sound_buffer(<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, 60, {'duration': 500000000L, 'timestamp': 5
4000000000L}) source=<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, suspended=False, sequence=-1
2014-09-04 19:12:59,677 new_sound_buffer(<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, 60, {'duration': 500000000L, 'timestamp': 5
4500000000L}) source=<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, suspended=False, sequence=-1
2014-09-04 19:13:00,176 new_sound_buffer(<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, 60, {'duration': 500000000L, 'timestamp': 5
5000000000L}) source=<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, suspended=False, sequence=-1
2014-09-04 19:13:00,674 new_sound_buffer(<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, 60, {'duration': 500000000L, 'timestamp': 5
5500000000L}) source=<SoundSource object at 0x7f2fe822c6e0 (xpra+sound+src+SoundSource at 0x7f2fdc0021a0)>, suspended=False, sequence=-1

At this point server do not respond to new connections so I terminate it with "kill -9".

Workaround: attach with --no-speaker.

This is a very old issue which I can reproduce easily with 0.14.4.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions