Здравствуйте. У меня снова падает hibernate(8) :) (gdb) bt #0 0x4ee3a593 in strpbrk () from /lib/libc.so.6 #1 0x0804fc35 in _rmescapes (str=0xc72384 <Address 0xc72384 out of bounds>, flag=0) at ../../src/expand.c:1611 #2 0x080534dd in readcmd_handle_line (line=0x9c7237c "19540", ap=0x9c7234c, len=6) at ../../src/miscbltin.c:103 #3 0x08053701 in readcmd (argc=2, argv=0x9c72348) at ../../src/miscbltin.c:185 #4 0x0804c43f in evalbltin (cmd=0x805d62c, argc=2, argv=0x9c72348, flags=0) at ../../src/eval.c:914 #5 0x0804c2b2 in evalcommand (cmd=0x9c3f5a4, flags=0) at ../../src/eval.c:857 дальше ещё много рекурсивных евалов всяких, неинтересно наверно. (gdb) fr 2 #2 0x080534dd in readcmd_handle_line (line=0x9c7237c "19540", ap=0x9c7234c, len=6) at ../../src/miscbltin.c:103 103 rmescapes(remainder); (gdb) p remainder $3 = 0xc72384 <Address 0xc72384 out of bounds> (gdb) p *sl $9 = {next = 0xc72394, text = 0xc7237c <Address 0xc7237c out of bounds>} (gdb) p arglist $11 = {list = 0x9c7238c, lastp = 0x9c723bc} (gdb) p *arglist.list $12 = {next = 0xc72394, text = 0xc7237c <Address 0xc7237c out of bounds>} Вот где-то тут. Корку могу даже приложить, но она под локально собранный /bin/ash (кстати, в спеке хорошо бы %{?_enable_debug:%optflags_debug} в BUILD_FLAGS, чтобы --enable debug работал).
Падает в /usr/share/hibernate/scriptlets.d/lockfile в LockFileGet, очевидно на read. В файле /var/run/hibernate-script.pid как раз содержится строка 19540. Ошибка явно где-то в expand.c::ifsbreakup(), а началось всё, видимо, после 55c46b72, в котором эта функция была использована для разбора read.
Нужно более подробный тесткейс. Вы можете найти каком файле оно падает и приаттачить его ?
(В ответ на комментарий №2) > Нужно более подробный тесткейс. Куда уж подробнее. Вот более краткий - не сделаю. > Вы можете найти каком файле оно падает и приаттачить его ? Предыдущего комментария недостаточно?
(В ответ на комментарий №3) > > Вы можете найти каком файле оно падает и приаттачить его ? > Предыдущего комментария недостаточно? Нет. Нужно содержимое файла. Сейчас невозможно понять на чём падает парсер. Тесткейсы на read, которые раньше у меня падали сейчас работают.
(В ответ на комментарий №4) > > Предыдущего комментария недостаточно? > Нет. Нужно содержимое файла. Оно целиком приведено в комментарии. > Сейчас невозможно понять на чём падает парсер. *разводит руками* > Тесткейсы на read, которые раньше у меня падали сейчас работают. Тесткейс, сделанный из куска указанного в том комментарии кода, и читающий тот же самый файл, и у меня не падает. У меня и hibernate(8) падает не всегда, что я сделаю.
(В ответ на комментарий №5) > Оно целиком приведено в комментарии. Я делаю: $ cat > /tmp/z.sh <<EOF #!/bin/ash LockFileGet() { local other_pid read other_pid < /tmp/zzz.pid } LockFileGet EOF $ echo 19540 > /tmp/zzz.pid $ for i in `seq 0 10000`; do ./z.sh; done; echo $?; 0 $ printf '19540' > /tmp/zzz.pid $ for i in `seq 0 10000`; do ./z.sh; done; echo $? 0 $ cat > /tmp/z.sh <<EOF #!/bin/ash LockFileGet() { local other_pid read other_pid < /tmp/zzz.pid } for i in `seq 0 10000`; do LockFileGet; done EOF $ echo 19540 > /tmp/zzz.pid $ ./z.sh $ printf '19540' > /tmp/zzz.pid $ ./z.sh $ Всё работает корректно. Увы. > > Сейчас невозможно понять на чём падает парсер. > *разводит руками* /me тоже разводит руками > Тесткейс, сделанный из куска указанного в том комментарии кода, и читающий тот > же самый файл, и у меня не падает. У меня и hibernate(8) падает не всегда, что > я сделаю. Я тут бессилен.
Ещё один вопрос: Падает случайно не на просыпании ?
Нет, может упасть перед засыпанием, может после просыпания (при просыпании выполняется LockFilePut, там такой же read).