[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

More details:: esdrec hangs when esd is running - select function problem?



Hi All,

I've done one more test. I've run esd with:
$ strace 2>/tmp/debug esd
And then I've run on the another console:
$ esdrec > /tmp/test.raw
Then I've killed esdrec with CTRL+C (after a few seconds).
In the /tmp/debug I've found:

[...]
socket(PF_UNIX, SOCK_STREAM, 0)         = 4
fcntl64(4, F_SETFL, O_RDONLY|O_NONBLOCK) = 0
setsockopt(4, SOL_SOCKET, SO_LINGER, {onoff=1, linger=100}, 8) = 0
setsockopt(4, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
umask(0)                                = 022
bind(4, {sa_family=AF_UNIX, path="/tmp/.esd/socket"}, 18) = 0
umask(022)                              = 0
listen(4, 16)                           = 0
open("/dev/dsp", O_WRONLY|O_NONBLOCK)   = 5
fcntl64(5, F_GETFL)                     = 0x801 (flags O_WRONLY|O_NONBLOCK)
fcntl64(5, F_SETFL, O_WRONLY)           = 0
ioctl(5, SNDCTL_DSP_SETFMT, 0xbffff9a0) = 0
ioctl(5, SNDCTL_DSP_GETFMTS, 0xbffff9a0) = 0
ioctl(5, SNDCTL_DSP_STEREO, 0xbffff9a0) = 0
ioctl(5, SOUND_PCM_READ_RATE, 0xbffff9a0) = 0
ioctl(5, SNDCTL_DSP_GETBLKSIZE, 0xbffff9a0) = 0
select(6, NULL, [5], NULL, {0, 10})     = 1 (out [5], left {0, 10000})
[...]
select(5, [4], NULL, NULL, {0, 5500})   = 0 (Timeout)
ioctl(5, SNDCTL_DSP_POST, 0)            = 0
time(NULL)                              = 1064062091
select(5, [4], NULL, NULL, NULL)        = 1 (in [4])
accept(4, {sa_family=AF_UNIX, path="@"}, [2]) = 6
ioctl(6, FIONBIO, [0])                  = 0
setsockopt(6, SOL_SOCKET, SO_SNDBUF, [16384], 4) = 0
setsockopt(6, SOL_SOCKET, SO_RCVBUF, [16384], 4) = 0
accept(4, 0xbffff8a0, [2]) = -1 EAGAIN (Resource temporarily unavailable)
select(7, [6], NULL, NULL, {0, 0})      = 1 (in [6], left {0, 0})
read(6, "\r\37C@\340\32C@\314\373\377\277\0\236\0@NDNE", 20) = 20
write(6, "\1\0\0\0", 4)                 = 4
select(7, [4 6], NULL, NULL, {0, 5500}) = 1 (in [6], left {0, 10000})
select(7, [6], NULL, NULL, {0, 0})      = 1 (in [6], left {0, 0})
read(6, "\4\0\0\0", 4)                  = 4
select(7, [4 6], NULL, NULL, {0, 5500}) = 1 (in [6], left {0, 10000})
select(7, [6], NULL, NULL, {0, 0})      = 1 (in [6], left {0, 0})
read(6, "! \0\0D\254\0\0test.raw\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 136) = 136
setsockopt(6, SOL_SOCKET, SO_SNDBUF, [16384], 4) = 0
setsockopt(6, SOL_SOCKET, SO_RCVBUF, [16384], 4) = 0
close(5)                                = 0
nanosleep({0, 100000}, NULL)            = 0
open("/dev/dsp", O_RDWR|O_NONBLOCK)     = 5
fcntl64(5, F_GETFL)                     = 0x802 (flags O_RDWR|O_NONBLOCK)
fcntl64(5, F_SETFL, O_RDWR)             = 0
ioctl(5, SNDCTL_DSP_SETDUPLEX, 0)       = 0
ioctl(5, SNDCTL_DSP_SETFMT, 0xbffff7c0) = 0
ioctl(5, SNDCTL_DSP_GETFMTS, 0xbffff7c0) = 0
ioctl(5, SNDCTL_DSP_STEREO, 0xbffff7c0) = 0
ioctl(5, SOUND_PCM_READ_RATE, 0xbffff7c0) = 0
ioctl(5, SNDCTL_DSP_GETBLKSIZE, 0xbffff7c0) = 0
select(6, NULL, [5], NULL, {0, 10})     = 1 (out [5], left {0, 10000})
select(7, [4 6], NULL, NULL, {0, 0})    = 0 (Timeout)
select(7, [4 6], NULL, NULL, {0, 0})    = 0 (Timeout)
select(7, [4 6], NULL, NULL, {0, 0})    = 0 (Timeout)
select(7, [4 6], NULL, NULL, {0, 0})    = 0 (Timeout)
select(7, [4 6], NULL, NULL, {0, 0})    = 0 (Timeout)
select(7, [4 6], NULL, NULL, {0, 0})    = 0 (Timeout)
select(7, [4 6], NULL, NULL, {0, 0})    = 0 (Timeout)
select(7, [4 6], NULL, NULL, {0, 0})    = 0 (Timeout)
select(7, [4 6], NULL, NULL, {0, 0})    = 0 (Timeout)
select(7, [4 6], NULL, NULL, {0, 0})    = 0 (Timeout)
select(7, [4 6], NULL, NULL, {0, 0})    = 0 (Timeout)
select(7, [4 6], NULL, NULL, {0, 0})    = 0 (Timeout)
select(7, [4 6], NULL, NULL, {0, 0})    = 0 (Timeout)
select(7, [4 6], NULL, NULL, {0, 0})    = 0 (Timeout)

So it seems, that ESD is waiting for input from the client!!! (And as I've stated in my previous post the client is waiting for input
from the ESD).
It seems that there is a kind of deadlock there :-(...

--
		TIA & Regards,
		Wojtek Zabolotny
		wzab@ise.pw.edu.pl



Reply to: