You are not logged in.

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.

1

Friday, September 9th 2011, 5:37pm

[geloest] Timeshift Problem mit 1.7.x

Hi,

ich mach mal n Thread nur fuer das Problem hier auf:
Bei zentoo auf der SMT friert VDR haeuffig bei Timeshift ein,
zuerst dachte ich das waere eine xineliboutput Problem,
aber seitdem ich gdb und strace auf der Box am laufen hab, sieht
es anders aus.

Auszuloesen ist das Verhalten einfach. Timeshift starten auf USB, z.B.
und ein Paar mal Pause druecken.
Ploetzlich haengt die Box, Standbild keine Menues .....
SVDRP ist auch weg (seltsam)

strace vom VDR:

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


Es sieht so aus als ob sich da ein, oder mehrere locks ueberschneiden.

gdb log

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?)


Hat jemand so etwas schon mal gehabt ?

Gruesse,

Giga

This post has been edited 1 times, last edit by "giga-san" (Sep 15th 2011, 8:47pm)


carel

Intermediate

Posts: 436

Location: Niederlande

Occupation: Satelliet und ICT

  • Send private message

2

Friday, September 9th 2011, 11:29pm

Hi, hast du der Ext patch eingespielt?
Ich hab bemerkt das, eben mit ausgeschaltenes livebuffer, es problemen geben kann mit dem normalen timeshift.
Intel E7400, Ubuntu Server x86_64 12.04, Nvidia GF9400, nvidia 295.40, vdr-1.7.27+ext patch, xine-lib-git + df patches, xineliboutput-git :portal1

Posts: 5,577

Location: Main-Spessart

  • Send private message

3

Friday, September 9th 2011, 11:48pm

Komisch bei mir gibts erst Probleme, wenn ich Livebuffer reinpatche. Vorher verhält sich der VDR normal. Naja ich habe auch einen andere Distri.
VDR4Arch --> Lian-Li PC-C37B | ASRock Q1900M | 4GB RAM | SanDisk SDSSDP064G | Samsung HD155UI | DD Cine S2 V6.2 | ZOTAC GT630 (Rev. 2) Zone Edition

4

Tuesday, September 13th 2011, 12:51pm

Ich hab den Bug bis in die dvbplayer.c verfolgt, ich verstehe das Problem
noch nicht ganz, aber es sieht so aus.

Irgendwann liest der reader thread ein Paket vom File, und wird es nicht
los, scheinbar, weil der Player thread noch nicht wieder laeuft, oder
weil das Paket keine gueltigen Daten enthaelt.
Danach loopt der thread und gibt auch keine Daten mehr weiter.

Eine Loesung ist es die Daten in dem Fall zu verwerfen, das gibt
einen kurzen Fehler im Bild, aber der thread blockt nicht mehr.

Giga

5

Thursday, September 15th 2011, 8:46pm

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:

Patch:

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;


Gruesse,

Giga

helau

Sage

Posts: 5,120

Location: Northern Black Forest

  • Send private message

6

Thursday, September 15th 2011, 10:26pm

Hi

von Zeile 56 bis 61 taucht Length und length auf, ist das so richtig ?
Falls ja sind die Variablennamen sehr ungluecklich gewaehlt ...
Gen2VDR / alcd / admin / yacoto - Features & Bugs - HW: Zotac Geforce 9300 MoBo / Cine-S2 im Activy Gehaeuse
und her mit den Logs :)

7

Thursday, September 15th 2011, 10:41pm

Ja, das ist jedoch nicht von mir ...

Giga

kls

Master

Posts: 2,689

Location: Mettenheim

  • Send private message

8

Friday, February 17th 2012, 4:57pm

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:


Zu deinem Patch habe ich ein paar Fragen...

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);
 }

Hat das einen bestimmten Grund, 'result' und 'buffer' hier abzufragen? 'free()' ist doch "NULL-proof".

Quoted


Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 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;

Die letzten 4 Zeilen haben doch unmittelbar vorher durch den Clear()-Aufruf bereits stattgefunden - oder übersehe ich da was?

Magst du bitte mal schauen, ob folgende überarbeitete Version deines Patches immer noch wie erwartet funktioniert?

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;


Falls du in HISTORY/CONTRIBUTORS genannt werden willst, schick mir bitte deinen vollen Namen und deine Email-Adresse.

Klaus
Gib CI+/HD+ keine Chance! Lasst diese Pest am ausgestreckten Arm verhungern!
Wer für sowas bezahlt macht sich zum Totengräber von Projekten wie VDR!
Die Wahrheit ueber HD Plus
CI-Plus -- Das trojanische Pferd im Wohnzimmer

kls

Master

Posts: 2,689

Location: Mettenheim

  • Send private message

9

Monday, February 20th 2012, 10:18am

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:
...


Auf der VDR-ML gab es eine Meldung, daß diese Änderung Probleme mit vdr-xine macht (siehe http://linuxtv.org/pipermail/vdr/2012-February/025783.html). Ich tendiere daher dazu, diese Änderung wieder Rückgängig zu machen.
Gibt es dagegen Einwände? Oder einen Fix für das vdr-xine Problem?

Klaus

EDIT: war ein "quote" zuviel...
Gib CI+/HD+ keine Chance! Lasst diese Pest am ausgestreckten Arm verhungern!
Wer für sowas bezahlt macht sich zum Totengräber von Projekten wie VDR!
Die Wahrheit ueber HD Plus
CI-Plus -- Das trojanische Pferd im Wohnzimmer

This post has been edited 1 times, last edit by "kls" (Feb 20th 2012, 8:24pm)


10

Monday, February 20th 2012, 6:32pm

Wäre schade wenn das wieder zurückgenommen würde - auf ein stabiles Pausieren hatte ich mich schon gefreut. Fix für xine kenne ich leider nicht. Was sagt rnissl dazu ?
VDR User: 87 - LaScala LC14B - LG/Phillipps 6,4" VGA Display | Asrock H61/U3S3 | G630T | 1x 16GB Mobi Mtron 3035 1x WD 750GB 2,5" |1x L4m DVB-S2 Version 5.4

11

Monday, February 20th 2012, 6:54pm

ich hab ja so gar keinen plan ob es hier reinpasst :
[BUG] Pause = 100% CPU Auslastung

hat nix damit zu tun ?

EDIT: zu spät den link gelesen .... aber evtl. war es ja trotzdem zu was gut ...

kls

Master

Posts: 2,689

Location: Mettenheim

  • Send private message

12

Monday, February 20th 2012, 8:31pm

Wäre schade wenn das wieder zurückgenommen würde - auf ein stabiles Pausieren hatte ich mich schon gefreut.


Das Pausieren funktioniert in der 1.7.24 unabhängig von dieser Änderung jetzt ordentlich. Sowohl für SD als auch HD. Und es wird auch nicht mehr der Bildschirm mehrere Sekunden schwarz.
Probier's einfach mal aus ;-)

Quoted

Fix für xine kenne ich leider nicht. Was sagt rnissl dazu ?


Das eigentliche Problem, das der Patch in diesem Thread fixen soll, konnte ich selber nicht nachvollziehen. Da mir die Änderung aber durchaus plausibel erschien, habe ich sie übernommen. Wenn die nun aber mehr Probleme erzeugt als sie löst, muß ich sie leider wieder entfernen.

Klaus
Gib CI+/HD+ keine Chance! Lasst diese Pest am ausgestreckten Arm verhungern!
Wer für sowas bezahlt macht sich zum Totengräber von Projekten wie VDR!
Die Wahrheit ueber HD Plus
CI-Plus -- Das trojanische Pferd im Wohnzimmer

13

Monday, February 20th 2012, 10:32pm

Pausieren scheint jetzt zum ersten Mal seit SD-FF-Zeiten wieder zu funktionieren (zumindest mit softhddev und xineliboutput), auch ohne obige Korrektur. Was ist denn jetzt wirklich dafür verantwortlich?
vdr-2.1.6
linux-3.2.0-60 M3N78-VM DVB-C softhddev skinnopacity
yavdr-0.5 mit vielen Anpassungen (ramdisk, xbmc mit LCDd über glcdlib, vdrnfofs, ...)

14

Monday, February 20th 2012, 11:03pm

Lascala LC17 - tribute to viking ;o) + atric IR / AMD X2 BE-2400 / DVB-S2 TT3200 + DigitalDevices CineS2 (defekt) / yavdr stable / output: graphTFT-fe via 6.4" TFT & DVB-S/S2 via FullHD / NVidia GT220 passiv

15

Tuesday, February 21st 2012, 12:04pm

Ich hab jetzt geschaut: wesentlich ist der Teil mit INDEXFILETESTINTERVAL in recording.c, der neu reingekommen ist.
vdr-2.1.6
linux-3.2.0-60 M3N78-VM DVB-C softhddev skinnopacity
yavdr-0.5 mit vielen Anpassungen (ramdisk, xbmc mit LCDd über glcdlib, vdrnfofs, ...)

kls

Master

Posts: 2,689

Location: Mettenheim

  • Send private message

16

Tuesday, February 21st 2012, 12:32pm

Ich hab jetzt geschaut: wesentlich ist der Teil mit INDEXFILETESTINTERVAL in recording.c, der neu reingekommen ist.


Früher wurde eine Aufnahme gestartet, dann wurde einige Sekunden gewartet, dann die Wiedergabe gestartet, wieder einige Sekunden gewartet und schließlich der "Pause"-Befehl geschickt.
Das stand naturgemäß auf recht tönernen Füßen, denn wenn sich der erwartete Zustand nicht innerhalb der vorgegebenen Zeit eingestellt hat, ging es eben schief.

Ab Version 1.7.24 wird jetzt die Aufnahme und auch gleich die Wiedergabe gestartet. Die Wiedergabe wartet, bis in der Index-Datei mindestens zwei Einträge drin sind und macht dann ein "Goto" zum ersten Frame mit dortigem Standbild. Das läuft anscheinend recht zuverlässig und dauert nur genau so lange, wie es eben braucht. Kein längerer schwarzer Bildschirm mehr und auch keine abgebrochene Wiedergabe, weil die Aufnahme noch nicht so weit ist.

Klaus
Gib CI+/HD+ keine Chance! Lasst diese Pest am ausgestreckten Arm verhungern!
Wer für sowas bezahlt macht sich zum Totengräber von Projekten wie VDR!
Die Wahrheit ueber HD Plus
CI-Plus -- Das trojanische Pferd im Wohnzimmer

tom66

Professional

Posts: 555

Location: Deutschland / Thüringen

  • Send private message

17

Sunday, February 26th 2012, 11:49am

Mal eine Frage "am Rande": Ist denn Timeshift mit der VDR-Server-Client-Lösung (hier) auch am Client möglich?
VDR-Server: Gentoo (AMD64/Core-i7) / VDR-1.7.23 / Digital Devices Octopus CI & 2xDuoFlex S2 HDTV (Rev. V3)
VDR-Client: Gentoo (AMD64/Atom-D525) / VDR-1.7.23 / Chieftech & iMON-Pad / ASUSTeK - AT5IONT-I / 4GB-RAM & 65GB-SSD
Alt: 3xTT-1.5 / linuxtv-dvb-1.1.1 + test_av-1.28 + FW-2622 / vdr-1.3.37 / viele Plugins / LFS-4.1