Dear visitor, welcome to VDR Portal. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.
|
|
Source code |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 |
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
stat64("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec/resume", 0xbfec6714) = -1 ENOENT (No such file or directory)
open("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec/resume", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec/info", O_RDONLY|O_LARGEFILE) = 24
fstat64(24, {st_mode=S_IFREG|0755, st_size=570, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb789e000
read(24, "C S19.2E-1-1101-28106 Das Erste\n"..., 4096) = 570
read(24, "", 4096) = 0
close(24) = 0
munmap(0xb789e000, 4096) = 0
gettid() = 1856
time(NULL) = 1315434024
send(3, "<11>Sep 8 00:20:24 vdr: [1856] "..., 146, MSG_NOSIGNAL) = 146
access("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec/00001.ts", R_OK) = 0
gettid() = 1856
time(NULL) = 1315434024
send(3, "<11>Sep 8 00:20:24 vdr: [1856] "..., 158, MSG_NOSIGNAL) = 158
open("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec/00001.ts", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 24
fadvise64_64(24, 0, 0, POSIX_FADV_RANDOM) = 0
access("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec/index", R_OK) = 0
access("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec/index", R_OK) = 0
stat64("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec/index", {st_mode=S_IFREG|0755, st_size=928, ...}) = 0
open("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec/index", O_RDONLY|O_LARGEFILE) = 25
read(25, "\0\0\0\0\0\200\1\0\250\22\1\0\0\0\1\0\20\244\1\0\0\0\1\0\214=\2\0\0\0\1\0"..., 928) = 928
clock_gettime(CLOCK_MONOTONIC, {228, 958304380}) = 0
clock_gettime(CLOCK_MONOTONIC, {228, 958373143}) = 0
time(NULL) = 1315434024
time(NULL) = 1315434024
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
stat64("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec/resume", 0xbfec67d4) = -1 ENOENT (No such file or directory)
open("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec/resume", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec/info", O_RDONLY|O_LARGEFILE) = 26
fstat64(26, {st_mode=S_IFREG|0755, st_size=570, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb789e000
read(26, "C S19.2E-1-1101-28106 Das Erste\n"..., 4096) = 570
read(26, "", 4096) = 0
close(26) = 0
munmap(0xb789e000, 4096) = 0
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, "LIVE 0\r\n", 8) = 8
futex(0xb5f222b4, FUTEX_CMP_REQUEUE_PRIVATE, 1, 2147483647, 0xb5f222e0, 36) = 1
futex(0xb5f222e0, FUTEX_WAKE_PRIVATE, 1) = 1
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, "DISCARD 65324360 34747\r\n", 24) = 24
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, "STILL 0\r\n", 9) = 9
clock_gettime(CLOCK_MONOTONIC, {228, 966280036}) = 0
clock_gettime(CLOCK_MONOTONIC, {228, 966346518}) = 0
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, "TRICKSPEED 1\r\n", 14) = 14
time(NULL) = 1315434024
stat64("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec//marks", 0xbfec6850) = -1 ENOENT (No such file or directory)
access("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec//marks", F_OK) = -1 ENOENT (No such file or directory)
futex(0xb5f222b4, FUTEX_CMP_REQUEUE_PRIVATE, 1, 2147483647, 0xb5f222e0, 38) = 1
futex(0xb5f222e0, FUTEX_WAKE_PRIVATE, 1) = 1
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, "STILL 0\r\n", 9) = 9
futex(0xb5f222b4, FUTEX_CMP_REQUEUE_PRIVATE, 1, 2147483647, 0xb5f222e0, 40) = 1
futex(0xb5f222e0, FUTEX_WAKE_PRIVATE, 1) = 1
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, "STILL 0\r\n", 9) = 9
mmap2(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0xb1e77000
mprotect(0xb1e77000, 4096, PROT_NONE) = 0
clone(child_stack=0xb2677484, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0xb2677bd8, {entry_number:6, base_addr:0xb2677b70, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}, child_tidptr=0xb2677bd8) = 2046
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({2, 0}, 0xbfec69e4) = 0
gettid() = 1856
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
getsockopt(19, SOL_SOCKET, SO_SNDBUF, [212992], [4]) = 0
ioctl(19, TIOCOUTQ, [0]) = 0
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, "OSDCMD\r\n", 8) = 8
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, ">\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0:\1\367\2p\0\33\0\0\0\207\0\0\0006"..., 62) = 62
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, "\374\374\0\377", 4) = 4
poll([{fd=19, events=POLLOUT}], 1, 300) = 1 ([{fd=19, revents=POLLOUT}])
write(19, "\0Bp\0\0\0Bp\0\0\0Bp\0\0\0Bp\0\0\0Bp\0\0\0Bp\0\0\0B"..., 135) = 135
clock_gettime(CLOCK_MONOTONIC, {230, 977525072}) = 0
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
getsockopt(19, SOL_SOCKET, SO_SNDBUF, [212992], [4]) = 0
ioctl(19, TIOCOUTQ, [201]) = 0
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, "OSDCMD\r\n", 8) = 8
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, ">\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 62) = 62
clock_gettime(CLOCK_MONOTONIC, {230, 978465354}) = 0
futex(0xb5f1f7e8, FUTEX_WAKE_PRIVATE, 1) = 1
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
getsockopt(19, SOL_SOCKET, SO_SNDBUF, [212992], [4]) = 0
ioctl(19, TIOCOUTQ, [271]) = 0
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, "OSDCMD\r\n", 8) = 8
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, ">\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 62) = 62
clock_gettime(CLOCK_MONOTONIC, {230, 979399063}) = 0
clock_gettime(CLOCK_MONOTONIC, {230, 979513360}) = 0
clock_gettime(CLOCK_MONOTONIC, {230, 979574795}) = 0
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, "TRICKSPEED 0\r\n", 14) = 14
time(NULL) = 1315434026
stat64("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec//marks", 0xbfec6940) = -1 ENOENT (No such file or directory)
time(NULL) = 1315434026
time(NULL) = 1315434026
gettimeofday({1315434026, 884528}, NULL) = 0
lstat64("/etc", {st_mode=S_IFDIR|0755, st_size=520, ...}) = 0
lstat64("/etc/vdr", {st_mode=S_IFDIR|0755, st_size=320, ...}) = 0
lstat64("/etc/vdr/channels.conf", {st_mode=S_IFREG|0644, st_size=29140, ...}) = 0
open("/etc/vdr/channels.conf.$$$", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 26
fstat64(26, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb789e000
write(26, ":->1,2,3,,,,,,,,\nDas Erste;ARD:1"..., 4096) = 4096
write(26, "on\n3sat;ZDFvision:11953:hC34M2O0"..., 4096) = 4096
write(26, "hichte,SpiegelG;SKY:12031:hC34M2"..., 4096) = 4096
write(26, "3,1834,9C4,9C7,9AF:312:133:17:0\n"..., 4096) = 4096
write(26, "331=deu@106:0:1702,1722,1833,183"..., 4096) = 4096
write(26, "10112:1:1092:0\nDr.Dish TV;BetaDi"..., 4096) = 4096
write(26, "12246:vC34M2O0S0:S19.2E:27500:43"..., 4096) = 4096
write(26, "rope:11739:vC34M2O0S0:S19.2E:275"..., 469) = 469
fsync(26) = 0
close(26) = 0
munmap(0xb789e000, 4096) = 0
rename("/etc/vdr/channels.conf.$$$", "/etc/vdr/channels.conf") = 0
unlink("/etc/vdr/channels.conf.$$$") = -1 ENOENT (No such file or directory)
lstat64("/etc", {st_mode=S_IFDIR|0755, st_size=520, ...}) = 0
lstat64("/etc/vdr", {st_mode=S_IFDIR|0755, st_size=320, ...}) = 0
lstat64("/etc/vdr/timers.conf", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
open("/etc/vdr/timers.conf.$$$", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 26
fstat64(26, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb789e000
write(26, "11:S19.2E-1-1101-28106:2011-09-0"..., 118) = 118
fsync(26) = 0
close(26) = 0
munmap(0xb789e000, 4096) = 0
rename("/etc/vdr/timers.conf.$$$", "/etc/vdr/timers.conf") = 0
unlink("/etc/vdr/timers.conf.$$$") = -1 ENOENT (No such file or directory)
time(NULL) = 1315434026
gettimeofday({1315434026, 914229}, NULL) = 0
time(NULL) = 1315434026
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
time(NULL) = 1315434026
time(NULL) = 1315434026
stat64("/storage/video/.update", 0xbfec69a0) = -1 ENOENT (No such file or directory)
time(NULL) = 1315434026
gettid() = 1856
accept(13, 0xbfec497c, [16]) = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1315434026, 915256}, NULL) = 0
clock_gettime(CLOCK_REALTIME, {1315434026, 915320309}) = 0
futex(0x81e7d84, FUTEX_WAIT_PRIVATE, 657, {0, 999935691}) = -1 ETIMEDOUT (Connection timed out)
clock_gettime(CLOCK_MONOTONIC, {232, 12558693}) = 0
futex(0x81e7d58, FUTEX_WAKE_PRIVATE, 1) = 0
time(NULL) = 1315434027
time(NULL) = 1315434027
time(NULL) = 1315434027
time(NULL) = 1315434027
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
time(NULL) = 1315434027
time(NULL) = 1315434027
stat64("/storage/video/.update", 0xbfec69a0) = -1 ENOENT (No such file or directory)
time(NULL) = 1315434027
gettid() = 1856
accept(13, 0xbfec497c, [16]) = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1315434027, 918027}, NULL) = 0
clock_gettime(CLOCK_REALTIME, {1315434027, 918090982}) = 0
futex(0x81e7d84, FUTEX_WAIT_PRIVATE, 659, {0, 999936018}) = -1 ETIMEDOUT (Connection timed out)
clock_gettime(CLOCK_MONOTONIC, {233, 15419041}) = 0
futex(0x81e7d58, FUTEX_WAKE_PRIVATE, 1) = 0
time(NULL) = 1315434028
stat64("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec//marks", 0xbfec6940) = -1 ENOENT (No such file or directory)
time(NULL) = 1315434028
time(NULL) = 1315434028
time(NULL) = 1315434028
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
time(NULL) = 1315434028
time(NULL) = 1315434028
stat64("/storage/video/.update", 0xbfec69a0) = -1 ENOENT (No such file or directory)
time(NULL) = 1315434028
gettid() = 1856
accept(13, 0xbfec497c, [16]) = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1315434028, 920917}, NULL) = 0
clock_gettime(CLOCK_REALTIME, {1315434028, 920981366}) = 0
futex(0x81e7d84, FUTEX_WAIT_PRIVATE, 661, {0, 999935634}) = -1 ETIMEDOUT (Connection timed out)
clock_gettime(CLOCK_MONOTONIC, {234, 19119660}) = 0
futex(0x81e7d58, FUTEX_WAKE_PRIVATE, 1) = 0
time(NULL) = 1315434029
time(NULL) = 1315434029
time(NULL) = 1315434029
time(NULL) = 1315434029
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
time(NULL) = 1315434029
time(NULL) = 1315434029
stat64("/storage/video/.update", 0xbfec69a0) = -1 ENOENT (No such file or directory)
time(NULL) = 1315434029
gettid() = 1856
accept(13, 0xbfec497c, [16]) = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1315434029, 924477}, NULL) = 0
clock_gettime(CLOCK_REALTIME, {1315434029, 924541997}) = 0
futex(0x81e7d84, FUTEX_WAIT_PRIVATE, 663, {0, 999935003}) = -1 ETIMEDOUT (Connection timed out)
clock_gettime(CLOCK_MONOTONIC, {235, 21883001}) = 0
futex(0x81e7d58, FUTEX_WAKE_PRIVATE, 1) = 0
time(NULL) = 1315434030
stat64("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec//marks", 0xbfec6940) = -1 ENOENT (No such file or directory)
time(NULL) = 1315434030
time(NULL) = 1315434030
time(NULL) = 1315434030
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
time(NULL) = 1315434030
time(NULL) = 1315434030
stat64("/storage/video/.update", 0xbfec69a0) = -1 ENOENT (No such file or directory)
time(NULL) = 1315434030
gettid() = 1856
accept(13, 0xbfec497c, [16]) = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1315434030, 927404}, NULL) = 0
clock_gettime(CLOCK_REALTIME, {1315434030, 927466228}) = 0
futex(0x81e7d84, FUTEX_WAIT_PRIVATE, 665, {0, 999937772}) = 0
futex(0x81e7d58, FUTEX_WAKE_PRIVATE, 1) = 0
time(NULL) = 1315434031
time(NULL) = 1315434031
time(NULL) = 1315434031
clock_gettime(CLOCK_MONOTONIC, {235, 218273713}) = 0
clock_gettime(CLOCK_MONOTONIC, {235, 218347326}) = 0
clock_gettime(CLOCK_MONOTONIC, {235, 218407882}) = 0
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, "TRICKSPEED 1\r\n", 14) = 14
time(NULL) = 1315434031
time(NULL) = 1315434031
time(NULL) = 1315434031
gettimeofday({1315434031, 125955}, NULL) = 0
time(NULL) = 1315434031
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
time(NULL) = 1315434031
time(NULL) = 1315434031
stat64("/storage/video/.update", 0xbfec69a0) = -1 ENOENT (No such file or directory)
time(NULL) = 1315434031
gettid() = 1856
accept(13, 0xbfec497c, [16]) = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1315434031, 127332}, NULL) = 0
clock_gettime(CLOCK_REALTIME, {1315434031, 127794301}) = 0
futex(0x81e7d84, FUTEX_WAIT_PRIVATE, 667, {0, 999537699}) = 0
futex(0x81e7d58, FUTEX_WAKE_PRIVATE, 1) = 0
time(NULL) = 1315434031
time(NULL) = 1315434031
time(NULL) = 1315434031
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
clock_gettime(CLOCK_MONOTONIC, {235, 936078252}) = 0
clock_gettime(CLOCK_MONOTONIC, {235, 936151567}) = 0
poll([{fd=19, events=POLLOUT}], 1, 100) = 1 ([{fd=19, revents=POLLOUT}])
write(19, "TRICKSPEED 0\r\n", 14) = 14
futex(0xb5fb77bc, FUTEX_WAKE_PRIVATE, 1) = 0
time(NULL) = 1315434031
time(NULL) = 1315434031
time(NULL) = 1315434031
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
time(NULL) = 1315434031
time(NULL) = 1315434031
stat64("/storage/video/.update", 0xbfec69a0) = -1 ENOENT (No such file or directory)
time(NULL) = 1315434031
gettid() = 1856
accept(13, 0xbfec497c, [16]) = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1315434031, 843129}, NULL) = 0
clock_gettime(CLOCK_REALTIME, {1315434031, 843192669}) = 0
futex(0x81e7d84, FUTEX_WAIT_PRIVATE, 669, {0, 999936331}) = -1 ETIMEDOUT (Connection timed out)
clock_gettime(CLOCK_MONOTONIC, {236, 940451726}) = 0
futex(0x81e7d58, FUTEX_WAKE_PRIVATE, 1) = 0
time(NULL) = 1315434032
stat64("/storage/video/@Unter_der_Sonne_Australiens_Spielfilm_Australien_2007_(Romulus,_my/2011-09-08.00.20.1-0.rec//marks", 0xbfec6940) = -1 ENOENT (No such file or directory)
time(NULL) = 1315434032
time(NULL) = 1315434032
time(NULL) = 1315434032
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
time(NULL) = 1315434032
time(NULL) = 1315434032
stat64("/storage/video/.update", 0xbfec69a0) = -1 ENOENT (No such file or directory)
time(NULL) = 1315434032
gettid() = 1856
accept(13, 0xbfec497c, [16]) = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1315434032, 845953}, NULL) = 0
clock_gettime(CLOCK_REALTIME, {1315434032, 846016583}) = 0
futex(0x81e7d84, FUTEX_WAIT_PRIVATE, 671, {0, 999936417}) = 0
futex(0x81e7d58, FUTEX_WAKE_PRIVATE, 1) = 0
time(NULL) = 1315434032
time(NULL) = 1315434032
time(NULL) = 1315434032
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0xb5fb77bc, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
|
|
|
Source code |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
-bash-4.1# gdb --args /usr/local/bin/vdr -c /etc/vdr -L /usr/local/lib/vdr -r /etc/vdr/recordctl.sh -E /storage/epg.data -v /storage/video --no-kbd --vfat -P "xineliboutput --local=none --remote=37890" -P "admin " GNU gdb (Gentoo 7.2 p1) 7.2 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i686-pc-linux-gnu". For bug reporting instructions, please see: <http://bugs.gentoo.org/>... Reading symbols from /usr/local/bin/vdr...done. (gdb) start Temporary breakpoint 1 at 0x8137ac7: file vdr.c, line 168. Starting program: /usr/local/bin/vdr -c /etc/vdr -L /usr/local/lib/vdr -r /etc/vdr/recordctl.sh -E /storage/epg.data -v /storage/video --no-kbd --vfat -P xineliboutput\ --local=none\ --remote=37890 -P admin\ [Thread debugging using libthread_db enabled] Temporary breakpoint 1, main (argc=17, argv=0xbffffcc4) at vdr.c:168 168 vdr.c: No such file or directory. in vdr.c (gdb) c Continuing. [New Thread 0xb7ad8b70 (LWP 3370)] [New Thread 0xb72d7b70 (LWP 3371)] [Thread 0xb7ad8b70 (LWP 3370) exited] [Thread 0xb72d7b70 (LWP 3371) exited] [New Thread 0xb72d7b70 (LWP 3385)] [New Thread 0xb7ad8b70 (LWP 3386)] [New Thread 0xb6ad6b70 (LWP 3387)] root: /etc/vdr/plugins/admin/admin.sh -init vdr starting (re)building admin.conf [New Thread 0xb62d5b70 (LWP 3498)] [New Thread 0xb5ad4b70 (LWP 3502)] [New Thread 0xb50a6b70 (LWP 3503)] [New Thread 0xb4824b70 (LWP 3512)] [New Thread 0xb3b23b70 (LWP 3520)] [Thread 0xb3b23b70 (LWP 3520) exited] [New Thread 0xb3b23b70 (LWP 3535)] [New Thread 0xb3322b70 (LWP 3536)] [New Thread 0xb2b21b70 (LWP 3537)] [Thread 0xb2b21b70 (LWP 3537) exited] [Thread 0xb3322b70 (LWP 3536) exited] [Thread 0xb3b23b70 (LWP 3535) exited] [New Thread 0xb3b23b70 (LWP 3552)] [New Thread 0xb3322b70 (LWP 3555)] [New Thread 0xb2b21b70 (LWP 3556)] [Thread 0xb2b21b70 (LWP 3556) exited] [Thread 0xb3322b70 (LWP 3555) exited] [Thread 0xb3b23b70 (LWP 3552) exited] [New Thread 0xb3b23b70 (LWP 3571)] [New Thread 0xb3322b70 (LWP 3572)] [New Thread 0xb2b21b70 (LWP 3573)] ^C Program received signal SIGINT, Interrupt. 0xb7fdd424 in __kernel_vsyscall () (gdb) info thread 20 Thread 0xb2b21b70 (LWP 3573) 0xb7fdd424 in __kernel_vsyscall () 19 Thread 0xb3322b70 (LWP 3572) 0xb7fdd424 in __kernel_vsyscall () 18 Thread 0xb3b23b70 (LWP 3571) 0xb7fdd424 in __kernel_vsyscall () 10 Thread 0xb4824b70 (LWP 3512) 0xb7fdd424 in __kernel_vsyscall () 9 Thread 0xb50a6b70 (LWP 3503) 0xb7fdd424 in __kernel_vsyscall () 8 Thread 0xb5ad4b70 (LWP 3502) 0xb7fdd424 in __kernel_vsyscall () 7 Thread 0xb62d5b70 (LWP 3498) 0xb7fdd424 in __kernel_vsyscall () 6 Thread 0xb6ad6b70 (LWP 3387) 0xb7fdd424 in __kernel_vsyscall () 5 Thread 0xb7ad8b70 (LWP 3386) 0xb7fdd424 in __kernel_vsyscall () 4 Thread 0xb72d7b70 (LWP 3385) 0xb7fdd424 in __kernel_vsyscall () * 1 Thread 0xb7b876d0 (LWP 3323) 0xb7fdd424 in __kernel_vsyscall () (gdb) thread 20 [Switching to thread 20 (Thread 0xb2b21b70 (LWP 3573))]#0 0xb7fdd424 in __kernel_vsyscall () (gdb) bc Undefined command: "bc". Try "help". (gdb) bt #0 0xb7fdd424 in __kernel_vsyscall () #1 0xb7f75bd2 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #2 0x0812e280 in cCondWait::Wait (this=0x862d960, TimeoutMs=1000) at thread.c:71 #3 0x080b54a4 in cNonBlockingFileReader::Action (this=0x862d920) at dvbplayer.c:180 #4 0x0812d99a in cThread::StartThread (Thread=0x862d920) at thread.c:257 #5 0xb7f70aee in start_thread () from /lib/libpthread.so.0 #6 0xb7cadf5e in clone () from /lib/libc.so.6 (gdb) thread 19 [Switching to thread 19 (Thread 0xb3322b70 (LWP 3572))]#0 0xb7fdd424 in __kernel_vsyscall () (gdb) bt #0 0xb7fdd424 in __kernel_vsyscall () #1 0xb7f75bd2 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #2 0x0812e280 in cCondWait::Wait (this=0xb3321f34, TimeoutMs=3) at thread.c:71 #3 0x0812e411 in cCondWait::SleepMs (TimeoutMs=3) at thread.c:60 #4 0xb7b01413 in cXinelibDevice::Poll (this=0x85e26d8, Poller=..., TimeoutMs=0) at device.c:1444 #5 0xb7b0186c in cXinelibDevice::PlayAny (this=0x85e26d8, buf=0x85e50fc "G", length=2068) at device.c:1083 #6 0xb7b01b9b in cXinelibDevice::TsBufferFlush (this=0x85e26d8) at device.c:1168 #7 0xb7b01cca in cXinelibDevice::PlayTsAny (this=0x85e26d8, buf=0xb2262e84 "G", length=188) at device.c:1196 #8 0xb7b01e7b in cXinelibDevice::PlayTsVideo (this=0x85e26d8, Data=0xb2262e84 "G", Length=188) at device.c:1250 #9 0x080aa626 in cDevice::PlayTs (this=0x85e26d8, Data=0xb2262e84 "G", Length=188, VideoOnly=true) at device.c:1480 #10 0xb7b020cf in cXinelibDevice::PlayTs (this=0x85e26d8, Data=0xb2262e84 "G", Length=1, VideoOnly=128) at device.c:1133 #11 0x080b6a44 in PlayTs (this=0x86520b8) at player.h:47 #12 cDvbPlayer::Action (this=0x86520b8) at dvbplayer.c:548 #13 0x0812d99a in cThread::StartThread (Thread=0x86520c4) at thread.c:257 #14 0xb7f70aee in start_thread () from /lib/libpthread.so.0 #15 0xb7cadf5e in clone () from /lib/libc.so.6 (gdb) thread 18 [Switching to thread 18 (Thread 0xb3b23b70 (LWP 3571))]#0 0xb7fdd424 in __kernel_vsyscall () (gdb) bt #0 0xb7fdd424 in __kernel_vsyscall () #1 0xb7f75bd2 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #2 0x0812e280 in cCondWait::Wait (this=0x862c9d8, TimeoutMs=100) at thread.c:71 #3 0x0810ee77 in cRingBuffer::WaitForGet (this=0x862c988) at ringbuffer.c:64 #4 0x0810f01a in cRingBufferLinear::Get (this=0x862c988, Count=@0xb3b2332c) at ringbuffer.c:350 #5 0x0810060e in cRecorder::Action (this=0x8629cf0) at recorder.c:124 #6 0x0812d99a in cThread::StartThread (Thread=0x8629e14) at thread.c:257 #7 0xb7f70aee in start_thread () from /lib/libpthread.so.0 #8 0xb7cadf5e in clone () from /lib/libc.so.6 (gdb) thread 10 [Switching to thread 10 (Thread 0xb4824b70 (LWP 3512))]#0 0xb7fdd424 in __kernel_vsyscall () (gdb) bt #0 0xb7fdd424 in __kernel_vsyscall () #1 0xb7ca1dae in poll () from /lib/libc.so.6 #2 0x08133793 in cPoller::Poll (this=0x64, TimeoutMs=100) at tools.c:1278 #3 0xb7b3c241 in cTcpWriter::Action (this=0x861dcc0) at tools/backgroundwriter.c:160 #4 0x0812d99a in cThread::StartThread (Thread=0x861dcc0) at thread.c:257 #5 0xb7f70aee in start_thread () from /lib/libpthread.so.0 #6 0xb7cadf5e in clone () from /lib/libc.so.6 (gdb) thread 8 [Switching to thread 8 (Thread 0xb5ad4b70 (LWP 3502))]#0 0xb7fdd424 in __kernel_vsyscall () (gdb) thread 9 [Switching to thread 9 (Thread 0xb50a6b70 (LWP 3503))]#0 0xb7fdd424 in __kernel_vsyscall () (gdb) bt #0 0xb7fdd424 in __kernel_vsyscall () #1 0xb7ca1dae in poll () from /lib/libc.so.6 #2 0x08133793 in cPoller::Poll (this=0x64, TimeoutMs=100) at tools.c:1278 #3 0x080aa0f7 in cTSBuffer::Action (this=0x85fe860) at device.c:1699 #4 0x0812d99a in cThread::StartThread (Thread=0x85fe860) at thread.c:257 #5 0xb7f70aee in start_thread () from /lib/libpthread.so.0 #6 0xb7cadf5e in clone () from /lib/libc.so.6 (gdb) thread 8 [Switching to thread 8 (Thread 0xb5ad4b70 (LWP 3502))]#0 0xb7fdd424 in __kernel_vsyscall () (gdb) bt #0 0xb7fdd424 in __kernel_vsyscall () #1 0xb7f75bd2 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #2 0x0812e280 in cCondWait::Wait (this=0x85fe938, TimeoutMs=100) at thread.c:71 #3 0x0810ee77 in cRingBuffer::WaitForGet (this=0x85fe8e8) at ringbuffer.c:64 #4 0x0810f01a in cRingBufferLinear::Get (this=0x85fe8e8, Count=@0xb5ad427c) at ringbuffer.c:350 #5 0x080a9ce9 in cTSBuffer::Get (this=0x85fe860) at device.c:1722 #6 0x080af8bd in cDvbDevice::GetTSPacket (this=0x85dae30, Data=@0xb5ad432c) at dvbdevice.c:1153 #7 0x080abc83 in cDevice::Action (this=0x85dae30) at device.c:1527 #8 0x0812d99a in cThread::StartThread (Thread=0x85dae30) at thread.c:257 #9 0xb7f70aee in start_thread () from /lib/libpthread.so.0 #10 0xb7cadf5e in clone () from /lib/libc.so.6 (gdb) thread 7 [Switching to thread 7 (Thread 0xb62d5b70 (LWP 3498))]#0 0xb7fdd424 in __kernel_vsyscall () (gdb) bt #0 0xb7fdd424 in __kernel_vsyscall () #1 0xb7ca1dae in poll () from /lib/libc.so.6 #2 0xb7b34f4a in cXinelibServer::Action (this=0x85e6128) at frontend_svr.c:1881 #3 0x0812d99a in cThread::StartThread (Thread=0x85e6128) at thread.c:257 #4 0xb7f70aee in start_thread () from /lib/libpthread.so.0 #5 0xb7cadf5e in clone () from /lib/libc.so.6 (gdb) thread 6 [Switching to thread 6 (Thread 0xb6ad6b70 (LWP 3387))]#0 0xb7fdd424 in __kernel_vsyscall () (gdb) bt #0 0xb7fdd424 in __kernel_vsyscall () #1 0xb7f75bd2 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #2 0x0812e19e in cCondVar::TimedWait (this=0x85e8b60, Mutex=..., TimeoutMs=5000) at thread.c:127 #3 0xb7b3b20b in cUdpScheduler::Action (this=0x85e8b30) at tools/udp_pes_scheduler.c:752 #4 0x0812d99a in cThread::StartThread (Thread=0x85e8b30) at thread.c:257 #5 0xb7f70aee in start_thread () from /lib/libpthread.so.0 #6 0xb7cadf5e in clone () from /lib/libc.so.6 (gdb) thread 5 [Switching to thread 5 (Thread 0xb7ad8b70 (LWP 3386))]#0 0xb7fdd424 in __kernel_vsyscall () (gdb) bt #0 0xb7fdd424 in __kernel_vsyscall () #1 0xb7ca1dae in poll () from /lib/libc.so.6 #2 0x08111188 in cSectionHandler::Action (this=0x85d1b18) at sections.c:184 #3 0x0812d99a in cThread::StartThread (Thread=0x85d1b18) at thread.c:257 #4 0xb7f70aee in start_thread () from /lib/libpthread.so.0 #5 0xb7cadf5e in clone () from /lib/libc.so.6 (gdb) thread 4 [Switching to thread 4 (Thread 0xb72d7b70 (LWP 3385))]#0 0xb7fdd424 in __kernel_vsyscall () (gdb) bt #0 0xb7fdd424 in __kernel_vsyscall () #1 0xb7f75bd2 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #2 0x0812e19e in cCondVar::TimedWait (this=0x85dddc8, Mutex=..., TimeoutMs=1000) at thread.c:127 #3 0x080b3db7 in cDvbTuner::Action (this=0x85dd708) at dvbdevice.c:697 #4 0x0812d99a in cThread::StartThread (Thread=0x85dd708) at thread.c:257 #5 0xb7f70aee in start_thread () from /lib/libpthread.so.0 #6 0xb7cadf5e in clone () from /lib/libc.so.6 (gdb) thread 1 [Switching to thread 1 (Thread 0xb7b876d0 (LWP 3323))]#0 0xb7fdd424 in __kernel_vsyscall () (gdb) bt #0 0xb7fdd424 in __kernel_vsyscall () #1 0xb7f78709 in __lll_lock_wait () from /lib/libpthread.so.0 #2 0xb7f737fd in _L_lock_493 () from /lib/libpthread.so.0 #3 0xb7f73623 in pthread_mutex_lock () from /lib/libpthread.so.0 #4 0x000003e3 in ?? () #5 0xbffff9b8 in ?? () Backtrace stopped: previous frame inner to this frame (corrupt stack?) |
This post has been edited 1 times, last edit by "giga-san" (Sep 15th 2011, 8:47pm)
|
|
Source code |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
--- vdr-1.7.21/dvbplayer.c 2010-03-07 15:24:26.000000000 +0100
+++ dvbplayer.c 2011-09-15 22:15:56.000000000 +0200
@@ -87,6 +87,7 @@
private:
cUnbufferedFile *f;
uchar *buffer;
+ uchar *result;
int wanted;
int length;
cCondWait newSet;
@@ -100,7 +101,7 @@
void Clear(void);
void Request(cUnbufferedFile *File, int Length);
int Result(uchar **Buffer);
- bool Reading(void) { return buffer; }
+ bool Reading(void) { return result; }
bool WaitForDataMs(int msToWait);
};
@@ -109,6 +110,7 @@
{
f = NULL;
buffer = NULL;
+ result = NULL;
wanted = length = 0;
Start();
}
@@ -117,14 +119,21 @@
{
newSet.Signal();
Cancel(3);
- free(buffer);
+ if (result)
+ free(result);
+ if (buffer)
+ free(buffer);
}
void cNonBlockingFileReader::Clear(void)
{
Lock();
f = NULL;
- free(buffer);
+ if (result)
+ free(result);
+ result = NULL;
+ if (buffer)
+ free(buffer);
buffer = NULL;
wanted = length = 0;
Unlock();
@@ -134,21 +143,25 @@
{
Lock();
Clear();
+ buffer = MALLOC(uchar, Length);
+ if (result)
+ free(result);
+ result = NULL;
+ length=0;
wanted = Length;
- buffer = MALLOC(uchar, wanted);
f = File;
- Unlock();
newSet.Signal();
+ Unlock();
}
int cNonBlockingFileReader::Result(uchar **Buffer)
{
LOCK_THREAD;
- if (buffer && length == wanted) {
- *Buffer = buffer;
- buffer = NULL;
+ if (result && length == wanted) {
+ *Buffer = result;
+ result = NULL;
return wanted;
- }
+ }
errno = EAGAIN;
return -1;
}
@@ -172,6 +185,8 @@
length = wanted = r; // this will forward the error status to the caller
}
if (length == wanted) {
+ result = buffer;
+ buffer=NULL;
cMutexLock NewDataLock(&newDataMutex);
newDataCond.Broadcast();
}
@@ -183,9 +198,9 @@
bool cNonBlockingFileReader::WaitForDataMs(int msToWait)
{
- cMutexLock NewDataLock(&newDataMutex);
- if (buffer && length == wanted)
+ if (result && length == wanted)
return true;
+ cMutexLock NewDataLock(&newDataMutex);
return newDataCond.TimedWait(newDataMutex, msToWait);
}
@@ -402,13 +417,13 @@
while (Running()) {
if (WaitingForData)
- nonBlockingFileReader->WaitForDataMs(3); // this keeps the CPU load low, but reacts immediately on new data
+ nonBlockingFileReader->WaitForDataMs(10); // this keeps the CPU load low, but reacts immediately on new data
else if (Sleep) {
cPoller Poller;
DevicePoll(Poller, 10);
Sleep = false;
if (playMode == pmStill || playMode==pmPause)
- cCondWait::SleepMs(3);
+ cCondWait::SleepMs(10);
}
{
LOCK_THREAD;
@@ -470,7 +485,14 @@
}
if (!eof) {
uchar *b = NULL;
- int r = nonBlockingFileReader->Result(&b);
+ int r,retries=5;
+ while (true) {
+ r = nonBlockingFileReader->Result(&b);
+ if (r == -1 && errno == EAGAIN && --retries)
+ nonBlockingFileReader->WaitForDataMs(10);
+ else
+ break;
+ }
if (r > 0) {
WaitingForData = false;
uint32_t Pts = 0;
|
Ich hab den Bug gefunden:
Bei sehr langsamen Medien kann ein Request haengen, was zu einem
Race zwischen dem Reader und dem Player fuehrt. dabei kann
es sowohl zu einem Haenger, wie zu einem Leak kommen:
Quoted
![]()
Source code
1 2 3 4 5 6 7 8 9 10@@ -117,14 +119,21 @@ { newSet.Signal(); Cancel(3); - free(buffer); + if (result) + free(result); + if (buffer) + free(buffer); }
Quoted
![]()
Source code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22void cNonBlockingFileReader::Clear(void) { Lock(); f = NULL; - free(buffer); + if (result) + free(result); + result = NULL; + if (buffer) + free(buffer); buffer = NULL; wanted = length = 0; Unlock(); @@ -134,21 +143,25 @@ { Lock(); Clear(); + buffer = MALLOC(uchar, Length); + if (result) + free(result); + result = NULL; + length=0;
|
|
Source code |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
--- ./dvbplayer.c 2010/03/07 14:24:26 2.21
+++ ./dvbplayer.c 2012/02/17 15:36:41
@@ -87,6 +87,7 @@
private:
cUnbufferedFile *f;
uchar *buffer;
+ uchar *result;
int wanted;
int length;
cCondWait newSet;
@@ -100,7 +101,7 @@
void Clear(void);
void Request(cUnbufferedFile *File, int Length);
int Result(uchar **Buffer);
- bool Reading(void) { return buffer; }
+ bool Reading(void) { return result; }
bool WaitForDataMs(int msToWait);
};
@@ -109,6 +110,7 @@
{
f = NULL;
buffer = NULL;
+ result = NULL;
wanted = length = 0;
Start();
}
@@ -118,6 +120,7 @@
newSet.Signal();
Cancel(3);
free(buffer);
+ free(result);
}
void cNonBlockingFileReader::Clear(void)
@@ -126,6 +129,8 @@
f = NULL;
free(buffer);
buffer = NULL;
+ free(result);
+ result = NULL;
wanted = length = 0;
Unlock();
}
@@ -137,16 +142,16 @@
wanted = Length;
buffer = MALLOC(uchar, wanted);
f = File;
- Unlock();
newSet.Signal();
+ Unlock();
}
int cNonBlockingFileReader::Result(uchar **Buffer)
{
LOCK_THREAD;
- if (buffer && length == wanted) {
- *Buffer = buffer;
- buffer = NULL;
+ if (result && length == wanted) {
+ *Buffer = result;
+ result = NULL;
return wanted;
}
errno = EAGAIN;
@@ -172,6 +177,8 @@
length = wanted = r; // this will forward the error status to the caller
}
if (length == wanted) {
+ result = buffer;
+ buffer = NULL;
cMutexLock NewDataLock(&newDataMutex);
newDataCond.Broadcast();
}
@@ -183,9 +190,9 @@
bool cNonBlockingFileReader::WaitForDataMs(int msToWait)
{
- cMutexLock NewDataLock(&newDataMutex);
- if (buffer && length == wanted)
+ if (result && length == wanted)
return true;
+ cMutexLock NewDataLock(&newDataMutex);
return newDataCond.TimedWait(newDataMutex, msToWait);
}
@@ -402,13 +409,13 @@
while (Running()) {
if (WaitingForData)
- nonBlockingFileReader->WaitForDataMs(3); // this keeps the CPU load low, but reacts immediately on new data
+ nonBlockingFileReader->WaitForDataMs(10); // this keeps the CPU load low, but reacts immediately on new data
else if (Sleep) {
cPoller Poller;
DevicePoll(Poller, 10);
Sleep = false;
if (playMode == pmStill || playMode==pmPause)
- cCondWait::SleepMs(3);
+ cCondWait::SleepMs(10);
}
{
LOCK_THREAD;
@@ -470,7 +477,15 @@
}
if (!eof) {
uchar *b = NULL;
- int r = nonBlockingFileReader->Result(&b);
+ int Retries = 5;
+ int r;
+ while (true) {
+ r = nonBlockingFileReader->Result(&b);
+ if (r == -1 && errno == EAGAIN && --Retries)
+ nonBlockingFileReader->WaitForDataMs(10);
+ else
+ break;
+ }
if (r > 0) {
WaitingForData = false;
uint32_t Pts = 0;
|
Ich hab den Bug gefunden:
Bei sehr langsamen Medien kann ein Request haengen, was zu einem
Race zwischen dem Reader und dem Player fuehrt. dabei kann
es sowohl zu einem Haenger, wie zu einem Leak kommen:
...
This post has been edited 1 times, last edit by "kls" (Feb 20th 2012, 8:24pm)
Wäre schade wenn das wieder zurückgenommen würde - auf ein stabiles Pausieren hatte ich mich schon gefreut.
Quoted
Fix für xine kenne ich leider nicht. Was sagt rnissl dazu ?
Was ist denn jetzt wirklich dafür verantwortlich?
: http://www.vdr-portal.de/board16-video-disk-recorder/board8-vdr-grundlagen/p962639-bug-pause-100-cpu-auslastung/#post962639 Ich hab jetzt geschaut: wesentlich ist der Teil mit INDEXFILETESTINTERVAL in recording.c, der neu reingekommen ist.