Well, here is a bit more information. Not sure if this will help at all.
I also did some hardware monitoring on these sessions. I saw no adverse issues, no temperature spikes, no spikes in memory usage.
I have determined that this is not related to any specific JPG file issue. Two identical files in the multi-image directory will cause the issue. One file will not have any problem. In general, I have found that the issue takes 7-10 minutes to cause the hang.
I experimented with killing the process in the middle of the hang. I was never able to fully kill the entire process (so it was always consuming 99% CPU), but I was able to kill Xorg, and specific threads attached to XBMC. Killing Xorg did not kill XBMC's runaway process.
I did find that sending sysrq signals to the kernel seems to work, but I cannot get a terminal to display, so I cannot see any information it might be providing. I found that sending a SIGSEGV while XBMC was running normally would cause a crashdump. I tried this during the hang, but did not get a core dump.
Lastly, I attached strace to the process while it was running. During the hang the first event is a timeout on a poll -- poll([{fd=20, events=POLLIN|POLLPRI}], 1, 1000) = 0 (Timeout) -- I then immediately sent a SIGSEGV. The process didn't die, but there is additional output. Then the trace hangs:
Code:
clock_gettime(CLOCK_MONOTONIC, {1181, 674278814}) = 0
clock_gettime(CLOCK_MONOTONIC, {1181, 674329938}) = 0
clock_gettime(CLOCK_MONOTONIC, {1181, 674593379}) = 0
time(NULL) = 1279156778
time(NULL) = 1279156778
time(NULL) = 1279156778
time(NULL) = 1279156778
time(NULL) = 1279156778
read(9, "MemTotal: 2059116 kB\nMemF"..., 1024) = 1024
read(9, " 0\nHugePages_Rsvd: 0\nH"..., 1024) = 140
read(9, "", 1024) = 0
read(9, "", 1024) = 0
_llseek(9, 0, [0], SEEK_SET) = 0
gettimeofday({1279156778, 552543}, NULL) = 0
getpid() = 2014
poll([{fd=20, events=POLLIN|POLLPRI}], 1, 1000) = 1 ([{fd=20, revents=POLLIN|POLLPRI}])
ioctl(20, 0xc0104652, 0xbff245e0) = 0
clock_gettime(CLOCK_MONOTONIC, {1181, 690040878}) = 0
nanosleep({0, 0}, NULL) = 0
clock_gettime(CLOCK_MONOTONIC, {1181, 690193970}) = 0
clock_gettime(CLOCK_MONOTONIC, {1181, 690227214}) = 0
clock_gettime(CLOCK_MONOTONIC, {1181, 690259341}) = 0
read(16, 0xbff23630, 4112) = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1279156778, 565657}, NULL) = 0
read(15, 0xb7709000, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(10, 0x9553530, 4096) = -1 EAGAIN (Resource temporarily unavailable)
select(11, [10], NULL, NULL, {0, 0}) = 0 (Timeout)
clock_gettime(CLOCK_MONOTONIC, {1181, 690529487}) = 0
clock_gettime(CLOCK_MONOTONIC, {1181, 690580611}) = 0
clock_gettime(CLOCK_MONOTONIC, {1181, 690836230}) = 0
time(NULL) = 1279156778
time(NULL) = 1279156778
time(NULL) = 1279156778
time(NULL) = 1279156778
time(NULL) = 1279156778
read(9, "MemTotal: 2059116 kB\nMemF"..., 1024) = 1024
read(9, " 0\nHugePages_Rsvd: 0\nH"..., 1024) = 140
read(9, "", 1024) = 0
read(9, "", 1024) = 0
_llseek(9, 0, [0], SEEK_SET) = 0
gettimeofday({1279156778, 568864}, NULL) = 0
getpid() = 2014
poll([{fd=20, events=POLLIN|POLLPRI}], 1, 1000) = 0 (Timeout)
poll([{fd=20, events=POLLIN|POLLPRI}], 1, 1000) = ? ERESTART_RESTARTBLOCK (To be restarted)
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
rt_sigaction(SIGSEGV, {SIG_DFL, [SEGV], SA_RESTART}, {0x3e8f0f0, [], 0}, 8) = 0
futex(0xb7478bd8, FUTEX_WAIT, 2135, NULL) = 0
ioctl(25, 0x4122, 0xbff243d0) = 0
poll([{fd=24, events=POLLIN|POLLERR|POLLNVAL}], 1, -1) = 1 ([{fd=24, revents=POLLIN}])
ioctl(25, 0x4122, 0) = 0
read(24, "\1\0\0\0\237\4\0\0\236\220\250\34\1\0\0\0", 64) = 16
ioctl(25, 0x4122, 0x10) = 0
poll([{fd=24, events=POLLIN|POLLERR|POLLNVAL}], 1, -1) = 1 ([{fd=24, revents=POLLIN}])
ioctl(25, 0x4122, 0) = 0
ioctl(24, 0x54a1, 0xbff23cf8) = 0
gettimeofday({1279156780, 377509}, NULL) = 0
read(24, "\1\0\0\0\237\4\0\0009I\355\35\1\0\0\0", 64) = 16
read(24, 0xbff23e48, 64) = -1 EAGAIN (Resource temporarily unavailable)
ioctl(24, 0x54a1, 0xbff23f18) = 0
read(24, 0xbff23ea8, 64) = -1 EAGAIN (Resource temporarily unavailable)
close(24) = 0
semop(65537, 0xbff23f34, 2) = 0
munmap(0xb5a44000, 32768) = 0
close(25) = 0
munmap(0xb5a4d000, 4096) = 0
munmap(0xb5a4c000, 4096) = 0
shmdt(0xb5a34000) = 0
shmctl(131074, IPC_64|IPC_STAT, 0xbff23eac) = 0
shmctl(131074, IPC_64|IPC_RMID, 0) = 0
shmdt(0xb5a4e000) = 0
shmctl(98305, IPC_64|IPC_STAT, 0xbff23eac) = 0
shmctl(98305, IPC_64|IPC_RMID, 0) = 0
semctl(65537, 0, IPC_64|IPC_RMID, 0xbff23ef8) = 0
rt_sigaction(SIGINT, {SIG_DFL, [INT], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGINT, {SIG_DFL, [INT], SA_RESTART}, {SIG_DFL, [INT], SA_RESTART}, 8) = 0
rt_sigaction(SIGTERM, {SIG_DFL, [TERM], SA_RESTART}, {0x3e96800, [TERM], SA_RESTART}, 8) = 0
poll([{fd=10, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=10, revents=POLLOUT}])
writev(10, [{"_\1\2\0\v\0@\0+\0\1\0", 12}, {NULL, 0}, {"", 0}], 3) = 12
poll([{fd=10, events=POLLIN}], 1, -1) = 1 ([{fd=10, revents=POLLIN}])
read(10, "\1\0\322\0\0\0\0\0\1\0\0\0\0\0\0\0\"\0\0\0H\377\36\10H\vU\10\0\0\0\0", 4096) = 32
read(10, 0x9553530, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=10, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=10, revents=POLLOUT}])
writev(10, [{"\33\1\2\0\0\0\0\0 \0\2\0\0\0\0\0+\0\1\0", 20}, {NULL, 0}, {"", 0}], 3) = 20
poll([{fd=10, events=POLLIN}], 1, -1) = 1 ([{fd=10, revents=POLLIN}])
read(10, "\n\3\324\0\16\0@\0\00229\10L\rN\10<\rN\10L\rN\10\0\0\0\0\210t\240\277"..., 4096) = 64
read(10, 0x9553530, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=10, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=10, revents=POLLOUT}])
writev(10, [{"\202\2\2\0\0\0\0\0+\0\1\0", 12}, {NULL, 0}, {"", 0}], 3) = 12
poll([{fd=10, events=POLLIN}], 1, -1
I think my biggest frustration is that I cannot get it to crash to a coredump. I am hoping this might give someone a good place I can try to look next.
Anyhow, back to my single image backgrounds.