mehr zu deadlocks (was: linux-l: fork() problem mit omniorb)

Steffen Dettmer steffen at dett.de
Di Nov 28 11:07:26 CET 2000


* Jan-Benedict Glaw wrote on Mon, Nov 27, 2000 at 12:09 +0100:
> On Mon, Nov 27, 2000 at 10:42:03AM +0100, Steffen Dettmer wrote:
> > * Jan-Benedict Glaw wrote on Sat, Nov 25, 2000 at 15:41 +0100:
> > Ja, schon klar. [...] Ergo kann ich schlecht schätzen, ob und
> > wie man die non-blocking bekommt.
> 
> Schreib' doch bitte nochmal genau auf, *wer* *wen* *wie* und in
> welcher Reihenfolge etc. aufruft...


#include <stdio.h>
#include <signal.h>
#include <time.h>

static unsigned int sig_count = 0;

void printtime(time_t timet)
{
    printf("still alive @ %s...\n", asctime(localtime(&timet)));
}

void signal_handler(int sig)
{
    time_t timet = time(NULL);
    sig_count++;
    //printf("signal handler");
    //printtime(timet);
    asctime(localtime(&timet));
}


int main()
{
    time_t timet, lasttimet=0;
    signal(SIGUSR1, signal_handler);
    for (;;) {
        timet = time(NULL);
        asctime(localtime(&timet));
        if (lasttimet!=timet) {
            printf("main still alive, sigcount: %d...", sig_count);
            printtime(timet);
            lasttimet=timet;
        }
    }
}

(klar: gcc -Wall -g test.c -o testc)

darauf dann ein:
perl -e 'while(true) {kill(USR1, $ARGV[0]);}' 11841
(11841 == pid, klar)

sollte dann irgentwann schiefgehen. Leider scheint der P100 hier
dazu zu lahm, schließlich muß das signal genau dann kommen, wenn
main im asctime(...) call steckt. Irgentwie kriege ich hier nur 5
signale pro sekunde... Na ja, jedenfalls sollte das Progrämchen
so "furchtbar labil" sein, bloß immer doof zu testen...

(Achso, Problem trat bei ner SuSE 6.3 auf, kann ja sein, daß die
libc an der Stelle "gefixt" wurde?!? Hab hier nur ne 7.0...)

oki,

Steffen

-- 
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.



Mehr Informationen über die Mailingliste linux-l