[sisyphus] Работоспособность Sun JDK и пара вопросов про glibc

Michael Rumjantsev =?iso-8859-1?q?geom_=CE=C1_inetlab=2Ecom?=
Пн Апр 15 13:18:41 MSD 2002


        Привет!

Хотелось бы выяснить, предпринимаются ли кем-нибудь попытки оживить Java
native threads под Sisyphus или вообще никто не в курсе? Тут, помнится,
уже были сообщения об этом, значит, не у меня одного проблемы.

Имеется Junior 1.1 с апдейтами из Sisyphus
kernel24-up-2.4.18-alt5
glibc-2.2.5-alt(1,2,3) (пробовались разные)
jre-1.3.1-alt2

Hа простом тесте java падает по SIGSEGV:
[geom на geom java]$ /usr/lib/jre1.3.1/bin/java -version
java version "1.3.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24)
Java HotSpot(TM) Client VM (build 1.3.1-b24, mixed mode)

[geom на geom java]$ /usr/lib/jre1.3.1/bin/java SegFaultTest
Segmentation fault

SegFaultTest.java
public class SegFaultTest
{
    public static void main(String[] args)
    {
        new SegFaultTest();
    }
    public SegFaultTest()
    {
        new SegFaultTest();
    }
}

Падает также любое Java-приложение, в котором при достаточно глубоком стеке
возникает exception (сиречь, сигнал). Естественно, java -classic работает прекрасно.

Могу твердо сказать, что glibc тут ни при чем - я перепробовал их штук пять
разнообразной сборки, все равно падает. Зато замена ядра на
kernel24-linus-2.4.18-alt5 все чудесным образом вылечивает. Может найдется
человек, способный разобраться в этой туче ядерных патчей и сказать, что
ему мешает?

Параллельно пара вопросов по glibc:
1) Почему не применяется РедХатовский метод сборки пакета с отдельной
   версиеий в /lib/i686/*, собранной с --enable-kernel=2.4.0? Для той же
   джавы это частично облегчает жизнь, падает реже.
2) Это даже не вопрос. В Сизифовской сборке в linuxthreads баг остался,
   надо патчик наложить. В том же РедХате это уже исправлено.

--- glibc-2.2.5/linuxthreads/signals.c.orig     Thu Mar 28 20:26:38 2002
+++ glibc-2.2.5/linuxthreads/signals.c  Thu Mar 28 20:27:34 2002
@@ -199,6 +199,7 @@
         s != __pthread_sig_debug) {
       sigdelset(&mask, s);
       if (sighandler[s].old == NULL ||
+          sighandler[s].old == (arch_sighandler_t) SIG_ERR ||
           sighandler[s].old == (arch_sighandler_t) SIG_DFL ||
           sighandler[s].old == (arch_sighandler_t) SIG_IGN) {
         sa.sa_handler = pthread_null_sighandler;

-- 
     Michael Rumjantsev
     iNetLab




Подробная информация о списке рассылки Sisyphus