ports/82777: sox does not play files correctly
George V. Kouryachy
frbrgeorge at gmail.com
Wed Jun 29 12:30:24 UTC 2005
>Number: 82777
>Category: ports
>Synopsis: sox does not play files correctly
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Wed Jun 29 12:30:23 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator: George V. Kouryachy
>Release: FreeBSD 5.4-RELEASE-p2 i386
>Organization:
Moscow State University, CMC dept, Russia
>Environment:
System: FreeBSD phobos.cs.msu.su 5.4-RELEASE-p2 FreeBSD 5.4-RELEASE-p2 #4: Tue Jun 14 18:13:40 MSD 2005 root at phobos.cs.msu.su:/usr/obj/usr/src/sys/PHOBOS i386
options HZ=4096
>Description:
When running though 'play', sox plays only the start of file,
then fcloses it. Strange thing in truss output below is that sox
performs ioctl(5,AUDIO_COMPAT_DRAIN,0x0) just after opening the file
instead of doing it just before closing the file.
>How-To-Repeat:
just use /usr/local/bin/plaay with any long .wav on fast computer
and you'll hear only start of sound
>Fix:
The patch followed is akina hack so it uses AUDIO_COMPAT_DRAIN
ioctl directly. To make it cleaner one may check out why original sox
performs AUDIO_COMPAT_DRAIN so early.
--- patch-src_st_ossstopwrite begins here ---
diff -ur src/handlers.c /dst/tmp/src/handlers.c
--- src/handlers.c Mon Dec 20 22:43:50 2004
+++ /dst/tmp/src/handlers.c Wed Jun 29 15:46:32 2005
@@ -322,7 +322,7 @@
#ifdef HAVE_OSS
{ossdspnames, ST_FILE_STEREO,
st_ossdspstartread, st_rawread, st_rawstopread,
- st_ossdspstartwrite, st_rawwrite, st_rawstopwrite, st_format_nothing_seek},
+ st_ossdspstartwrite, st_rawwrite, st_ossstopwrite, st_format_nothing_seek},
#endif
{prcnames, ST_FILE_SEEK,
st_prcstartread, st_prcread, st_rawstopread,
diff -ur src/oss.c /dst/tmp/src/oss.c
--- src/oss.c Tue Sep 28 06:33:09 2004
+++ /dst/tmp/src/oss.c Wed Jun 29 15:46:32 2005
@@ -25,6 +25,7 @@
*
*/
+#include <machine/pcaudioio.h>
#include "st_i.h"
#if defined(HAVE_OSS)
@@ -210,6 +211,18 @@
rc = ossdspinit(ft);
sigintreg(ft); /* Prepare to catch SIGINT */
return rc;
+}
+
+int st_ossstopwrite(ft_t ft)
+{
+ if (st_write(ft, ft->file.buf, 1, ft->file.pos) != ft->file.pos)
+ {
+ ft->file.eof = ST_EOF;
+ }
+ ioctl(fileno(ft->fp),AUDIO_COMPAT_DRAIN,ft->file.pos);
+ ft->file.pos = 0;
+ free(ft->file.buf);
+ return ST_SUCCESS;
}
int st_ossdspstartwrite(ft_t ft)
diff -ur src/st_i.h /dst/tmp/src/st_i.h
--- src/st_i.h Mon Dec 20 22:43:50 2004
+++ /dst/tmp/src/st_i.h Wed Jun 29 15:46:32 2005
@@ -259,6 +259,7 @@
#ifdef HAVE_OSS
int st_ossdspstartread(ft_t ft);
int st_ossdspstartwrite(ft_t ft);
+int st_ossstopwrite(ft_t ft);
#endif
int st_prcstartread(ft_t ft);
--- patch-src_st_ossstopwrite ends here ---
--- sox.truss begins here ---
mmap(0x0,3920,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 671756288 (0x280a3000)
munmap(0x280a3000,0xf50) = 0 (0x0)
__sysctl(0xbfbfe1c0,0x2,0x2809fc58,0xbfbfe1bc,0x0,0x0) = 0 (0x0)
mmap(0x0,32768,(0x3)PROT_READ|PROT_WRITE,(0x1002)MAP_ANON|MAP_PRIVATE,-1,0x0) = 671756288 (0x280a3000)
issetugid() = 0 (0x0)
open("/etc/libmap.conf",0x0,0666) ERR#2 'No such file or directory'
open("/var/run/ld-elf.so.hints",0x0,00) = 4 (0x4)
read(0x4,0xbfbfe268,0x80) = 128 (0x80)
lseek(4,0x80,SEEK_SET) = 128 (0x80)
read(0x4,0x280a8000,0x77) = 119 (0x77)
close(4) = 0 (0x0)
access("/lib/libvorbisfile.so.4",0) ERR#2 'No such file or directory'
access("/usr/lib/libvorbisfile.so.4",0) ERR#2 'No such file or directory'
access("/usr/lib/compat/libvorbisfile.so.4",0) ERR#2 'No such file or directory'
access("/usr/X11R6/lib/libvorbisfile.so.4",0) ERR#2 'No such file or directory'
access("/usr/local/lib/libvorbisfile.so.4",0) = 0 (0x0)
open("/usr/local/lib/libvorbisfile.so.4",0x0,00) = 4 (0x4)
fstat(4,0xbfbfe2b8) = 0 (0x0)
read(0x4,0x2809eba0,0x1000) = 4096 (0x1000)
mmap(0x0,28672,(0x5)PROT_READ|PROT_EXEC,(0x20002)MAP_NOCORE|MAP_PRIVATE,4,0x0) = 671789056 (0x280ab000)
mprotect(0x280b0000,4096,(0x7)PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mprotect(0x280b0000,4096,(0x5)PROT_READ|PROT_EXEC) = 0 (0x0)
mmap(0x280b1000,4096,(0x3)PROT_READ|PROT_WRITE,(0x12)MAP_FIXED|MAP_PRIVATE,4,0x5000) = 671813632 (0x280b1000)
close(4) = 0 (0x0)
access("/lib/libvorbisenc.so.2",0) ERR#2 'No such file or directory'
access("/usr/lib/libvorbisenc.so.2",0) ERR#2 'No such file or directory'
access("/usr/lib/compat/libvorbisenc.so.2",0) ERR#2 'No such file or directory'
access("/usr/X11R6/lib/libvorbisenc.so.2",0) ERR#2 'No such file or directory'
access("/usr/local/lib/libvorbisenc.so.2",0) = 0 (0x0)
open("/usr/local/lib/libvorbisenc.so.2",0x0,027757761270) = 4 (0x4)
fstat(4,0xbfbfe2b8) = 0 (0x0)
read(0x4,0x2809eba0,0x1000) = 4096 (0x1000)
mmap(0x0,1040384,(0x5)PROT_READ|PROT_EXEC,(0x20002)MAP_NOCORE|MAP_PRIVATE,4,0x0) = 671817728 (0x280b2000)
mprotect(0x280bc000,4096,(0x7)PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mprotect(0x280bc000,4096,(0x5)PROT_READ|PROT_EXEC) = 0 (0x0)
mmap(0x280bd000,987136,(0x3)PROT_READ|PROT_WRITE,(0x12)MAP_FIXED|MAP_PRIVATE,4,0xa000) = 671862784 (0x280bd000)
mmap(0x281ae000,8192,(0x3)PROT_READ|PROT_WRITE,(0x1012)MAP_ANON|MAP_FIXED|MAP_PRIVATE,-1,0x0) = 672849920 (0x281ae000)
close(4) = 0 (0x0)
access("/lib/libvorbis.so.3",0) ERR#2 'No such file or directory'
access("/usr/lib/libvorbis.so.3",0) ERR#2 'No such file or directory'
access("/usr/lib/compat/libvorbis.so.3",0) ERR#2 'No such file or directory'
access("/usr/X11R6/lib/libvorbis.so.3",0) ERR#2 'No such file or directory'
access("/usr/local/lib/libvorbis.so.3",0) = 0 (0x0)
open("/usr/local/lib/libvorbis.so.3",0x0,027757761270) = 4 (0x4)
fstat(4,0xbfbfe2b8) = 0 (0x0)
read(0x4,0x2809eba0,0x1000) = 4096 (0x1000)
mmap(0x0,155648,(0x5)PROT_READ|PROT_EXEC,(0x20002)MAP_NOCORE|MAP_PRIVATE,4,0x0) = 672858112 (0x281b0000)
mprotect(0x281c6000,4096,(0x7)PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mprotect(0x281c6000,4096,(0x5)PROT_READ|PROT_EXEC) = 0 (0x0)
mmap(0x281c7000,61440,(0x3)PROT_READ|PROT_WRITE,(0x12)MAP_FIXED|MAP_PRIVATE,4,0x17000) = 672952320 (0x281c7000)
close(4) = 0 (0x0)
access("/lib/libogg.so.5",0) ERR#2 'No such file or directory'
access("/usr/lib/libogg.so.5",0) ERR#2 'No such file or directory'
access("/usr/lib/compat/libogg.so.5",0) ERR#2 'No such file or directory'
access("/usr/X11R6/lib/libogg.so.5",0) ERR#2 'No such file or directory'
access("/usr/local/lib/libogg.so.5",0) = 0 (0x0)
open("/usr/local/lib/libogg.so.5",0x0,027757761270) = 4 (0x4)
fstat(4,0xbfbfe2b8) = 0 (0x0)
read(0x4,0x2809eba0,0x1000) = 4096 (0x1000)
mmap(0x0,20480,(0x5)PROT_READ|PROT_EXEC,(0x20002)MAP_NOCORE|MAP_PRIVATE,4,0x0) = 673013760 (0x281d6000)
mprotect(0x281d9000,4096,(0x7)PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mprotect(0x281d9000,4096,(0x5)PROT_READ|PROT_EXEC) = 0 (0x0)
mmap(0x281da000,4096,(0x3)PROT_READ|PROT_WRITE,(0x12)MAP_FIXED|MAP_PRIVATE,4,0x3000) = 673030144 (0x281da000)
close(4) = 0 (0x0)
access("/lib/libm.so.3",0) = 0 (0x0)
open("/lib/libm.so.3",0x0,027757761270) = 4 (0x4)
fstat(4,0xbfbfe2b8) = 0 (0x0)
read(0x4,0x2809eba0,0x1000) = 4096 (0x1000)
mmap(0x0,110592,(0x5)PROT_READ|PROT_EXEC,(0x20002)MAP_NOCORE|MAP_PRIVATE,4,0x0) = 673034240 (0x281db000)
mprotect(0x281f1000,4096,(0x7)PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mprotect(0x281f1000,4096,(0x5)PROT_READ|PROT_EXEC) = 0 (0x0)
mmap(0x281f2000,16384,(0x3)PROT_READ|PROT_WRITE,(0x12)MAP_FIXED|MAP_PRIVATE,4,0x17000) = 673128448 (0x281f2000)
close(4) = 0 (0x0)
access("/lib/libmad.so.2",0) ERR#2 'No such file or directory'
access("/usr/lib/libmad.so.2",0) ERR#2 'No such file or directory'
access("/usr/lib/compat/libmad.so.2",0) ERR#2 'No such file or directory'
access("/usr/X11R6/lib/libmad.so.2",0) ERR#2 'No such file or directory'
access("/usr/local/lib/libmad.so.2",0) = 0 (0x0)
open("/usr/local/lib/libmad.so.2",0x0,027757761270) = 4 (0x4)
fstat(4,0xbfbfe2b8) = 0 (0x0)
read(0x4,0x2809eba0,0x1000) = 4096 (0x1000)
mmap(0x0,90112,(0x5)PROT_READ|PROT_EXEC,(0x20002)MAP_NOCORE|MAP_PRIVATE,4,0x0) = 673144832 (0x281f6000)
mprotect(0x2820a000,4096,(0x7)PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mprotect(0x2820a000,4096,(0x5)PROT_READ|PROT_EXEC) = 0 (0x0)
mmap(0x2820b000,4096,(0x3)PROT_READ|PROT_WRITE,(0x12)MAP_FIXED|MAP_PRIVATE,4,0x14000) = 673230848 (0x2820b000)
close(4) = 0 (0x0)
access("/lib/libmp3lame.so.0",0) ERR#2 'No such file or directory'
access("/usr/lib/libmp3lame.so.0",0) ERR#2 'No such file or directory'
access("/usr/lib/compat/libmp3lame.so.0",0) ERR#2 'No such file or directory'
access("/usr/X11R6/lib/libmp3lame.so.0",0) ERR#2 'No such file or directory'
access("/usr/local/lib/libmp3lame.so.0",0) = 0 (0x0)
open("/usr/local/lib/libmp3lame.so.0",0x0,027757761270) = 4 (0x4)
fstat(4,0xbfbfe2b8) = 0 (0x0)
read(0x4,0x2809eba0,0x1000) = 4096 (0x1000)
mmap(0x0,622592,(0x5)PROT_READ|PROT_EXEC,(0x20002)MAP_NOCORE|MAP_PRIVATE,4,0x0) = 673234944 (0x2820c000)
mprotect(0x2824c000,4096,(0x7)PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mprotect(0x2824c000,4096,(0x5)PROT_READ|PROT_EXEC) = 0 (0x0)
mmap(0x2824d000,12288,(0x3)PROT_READ|PROT_WRITE,(0x12)MAP_FIXED|MAP_PRIVATE,4,0x40000) = 673501184 (0x2824d000)
mmap(0x28250000,344064,(0x3)PROT_READ|PROT_WRITE,(0x1012)MAP_ANON|MAP_FIXED|MAP_PRIVATE,-1,0x0) = 673513472 (0x28250000)
close(4) = 0 (0x0)
access("/lib/libc.so.5",0) = 0 (0x0)
open("/lib/libc.so.5",0x0,027757761270) = 4 (0x4)
fstat(4,0xbfbfe2b8) = 0 (0x0)
read(0x4,0x2809eba0,0x1000) = 4096 (0x1000)
mmap(0x0,892928,(0x5)PROT_READ|PROT_EXEC,(0x20002)MAP_NOCORE|MAP_PRIVATE,4,0x0) = 673857536 (0x282a4000)
mprotect(0x28364000,4096,(0x7)PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mprotect(0x28364000,4096,(0x5)PROT_READ|PROT_EXEC) = 0 (0x0)
mmap(0x28365000,20480,(0x3)PROT_READ|PROT_WRITE,(0x12)MAP_FIXED|MAP_PRIVATE,4,0xc0000) = 674648064 (0x28365000)
mmap(0x2836a000,81920,(0x3)PROT_READ|PROT_WRITE,(0x1012)MAP_ANON|MAP_FIXED|MAP_PRIVATE,-1,0x0) = 674668544 (0x2836a000)
close(4) = 0 (0x0)
access("/usr/local/lib/libvorbis.so.3",0) = 0 (0x0)
access("/usr/local/lib/libvorbis.so.3",0) = 0 (0x0)
access("/usr/local/lib/libogg.so.5",0) = 0 (0x0)
access("/usr/local/lib/libm.so.3",0) ERR#2 'No such file or directory'
access("/lib/libm.so.3",0) = 0 (0x0)
mmap(0x0,1184,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 674750464 (0x2837e000)
munmap(0x2837e000,0x4a0) = 0 (0x0)
mmap(0x0,936,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 674750464 (0x2837e000)
munmap(0x2837e000,0x3a8) = 0 (0x0)
mmap(0x0,456,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 674750464 (0x2837e000)
munmap(0x2837e000,0x1c8) = 0 (0x0)
mmap(0x0,1632,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 674750464 (0x2837e000)
munmap(0x2837e000,0x660) = 0 (0x0)
mmap(0x0,816,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 674750464 (0x2837e000)
munmap(0x2837e000,0x330) = 0 (0x0)
mmap(0x0,2104,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 674750464 (0x2837e000)
munmap(0x2837e000,0x838) = 0 (0x0)
mmap(0x0,736,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 674750464 (0x2837e000)
munmap(0x2837e000,0x2e0) = 0 (0x0)
mprotect(0x2820c000,266240,(0x7)PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mmap(0x0,3984,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 674750464 (0x2837e000)
munmap(0x2837e000,0xf90) = 0 (0x0)
mprotect(0x2820c000,266240,(0x5)PROT_READ|PROT_EXEC) = 0 (0x0)
mprotect(0x282a4000,790528,(0x7)PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mmap(0x0,22024,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 674750464 (0x2837e000)
munmap(0x2837e000,0x5608) = 0 (0x0)
mprotect(0x282a4000,790528,(0x5)PROT_READ|PROT_EXEC) = 0 (0x0)
sigaction(SIGILL,{ 0x28086b0c 0x0|ONSTACK|RESTART|RESETHAND|NOCLDSTOP|NODEFER|NOCLDWAIT|SIGINFO ss_t },{ SIG_DFL 0x0|ONSTACK|RESETHAND|NOCLDSTOP|NODEFER|NOCLDWAIT|SIGINFO ss_t }) = 0 (0x0)
sigprocmask(0x1,0x0,0x2809eafc) = 0 (0x0)
sigaction(SIGILL,{ SIG_DFL 0x0|ONSTACK|RESETHAND|NOCLDSTOP|NODEFER|NOCLDWAIT|SIGINFO ss_t },0x0) = 0 (0x0)
sysarch(0x1,0xbfbfe318) = 17 (0x11)
sigprocmask(0x1,0x2809eaa0,0xbfbfe318) = 0 (0x0)
sigprocmask(0x3,0x2809eab0,0x0) = 0 (0x0)
readlink("/etc/malloc.conf",0xbfbfe2a0,63) ERR#2 'No such file or directory'
issetugid() = 0 (0x0)
mmap(0x0,4096,(0x3)PROT_READ|PROT_WRITE,(0x1002)MAP_ANON|MAP_PRIVATE,-1,0x0) = 674750464 (0x2837e000)
break(0x80a6000) = 0 (0x0)
break(0x80a7000) = 0 (0x0)
break(0x80a8000) = 0 (0x0)
break(0x80a9000) = 0 (0x0)
open("open.wav",0x0,0666) = 4 (0x4)
fstat(4,0xbfbfe2f0) = 0 (0x0)
fstat(4,0xbfbfe1f0) = 0 (0x0)
break(0x80ad000) = 0 (0x0)
read(0x4,0x80a9000,0x4000) = 5607 (0x15e7)
lseek(4,0x0,SEEK_CUR) = 5607 (0x15e7)
break(0x80af000) = 0 (0x0)
lseek(4,0x0,SEEK_SET) = 0 (0x0)
read(0x4,0x80a9000,0x4000) = 5607 (0x15e7)
lseek(4,0x15e8,SEEK_SET) = 5608 (0x15e8)
read(0x4,0x80a9000,0x4000) = 0 (0x0)
lseek(4,0x0,SEEK_SET) = 0 (0x0)
read(0x4,0x80a9000,0x4000) = 5607 (0x15e7)
open("/dev/dsp",0x601,0666) = 5 (0x5)
fstat(5,0xbfbfe290) = 0 (0x0)
break(0x80b1000) = 0 (0x0)
fstat(5,0xbfbfe2d0) = 0 (0x0)
ioctl(5,SNDCTL_DSP_RESET,0x0) = 0 (0x0)
ioctl(5,SNDCTL_DSP_GETFMTS,0xbfbfe338) = 0 (0x0)
ioctl(5,SNDCTL_DSP_SETFMT,0xbfbfe338) = 0 (0x0)
ioctl(5,SNDCTL_DSP_STEREO,0xbfbfe338) = 0 (0x0)
ioctl(5,SNDCTL_DSP_SPEED,0xbfbfe338) = 0 (0x0)
ioctl(5,SNDCTL_DSP_GETBLKSIZE,0x80a88ac) = 0 (0x0)
break(0x80b2000) = 0 (0x0)
ioctl(5,AUDIO_COMPAT_DRAIN,0x0) = 0 (0x0)
break(0x80ba000) = 0 (0x0)
read(0x4,0x80a9000,0x4000) = 0 (0x0)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
write(5,0x80b1000,256) = 256 (0x100)
close(4) = 0 (0x0)
write(5,0x80b1000,187) = 187 (0xbb)
break(0x80b9000) = 0 (0x0)
close(5) = 0 (0x0)
break(0x80b7000) = 0 (0x0)
exit(0x0)
process exit, rval = 0
--- sox.truss ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list