Platform: Suse Linux (momenteel nog versie 7.3, maar dat moet binnenkort veranderen).
Situatie: ik heb een programma (zeg Prog A). Prog A maakt gebruik van een library en een device driver, beiden geleverd door de fabrikant van de hardware waar e.e.a. om draait (een CTI kaart). Ik heb dus geen sources van de driver en/of library. Dit programma (Prog A dus) draait onder controle van een soort watchdog (prog. B ). Nu heb ik het probleem dat af en toe programma A bij opstarten onderuit gaat, en daarbij tevens programma B meetrekt (althans zo lijkt het).
Na een hoop gezoek lijkt of blijkt, dat de driver of de library een signal verstuurt, SIGUSR2 om precies te zijn. Prog A doet hier niks mee (die kent helemaal geen signals) en het signal gaat (denk ik?) door naar de parent van prog A, prog B dus, die kan hier niet tegen en gaat onderuit, en sluit daarbij ook prog A af (andersom dus als de 1e analyse).
Nou heb ik om e.e.a. even te checken aan prog A een signal handler toegevoegd die alle SIGUSR2 's afvangt en een regeltje in een logfile zet alvorens de signals door te geven aan de oorspronkelijke signal handler. En nu blijkt dat dat signal zo'n beetje bij elke call naar de API verstuurd wordt (ca. 40 keer per seconde).... Mijn signal handler vangt dat dus nu af, stuurt hem naar de oorspronkelijke handler (in de lib) en die handelt e.e.a. af (maar heel soms niet goed dus, waarna het signal kennelijk weer "naar boven" gestuurd wordt). Mijn gevolgtrekking nu is, dat de device driver communiceert met de library d.m.v. dit signal.
Vraag: is dit normaal gedrag voor een device driver?? Ik ging er tot dusverre van uit dat signals alleen verstuurd worden in uitzonderlijke situaties. De library/driver zijn namelijk in opdracht gemaakt, en als die zondigen tegen algemeen gangbare regels, gaan we ermee terug...
Situatie: ik heb een programma (zeg Prog A). Prog A maakt gebruik van een library en een device driver, beiden geleverd door de fabrikant van de hardware waar e.e.a. om draait (een CTI kaart). Ik heb dus geen sources van de driver en/of library. Dit programma (Prog A dus) draait onder controle van een soort watchdog (prog. B ). Nu heb ik het probleem dat af en toe programma A bij opstarten onderuit gaat, en daarbij tevens programma B meetrekt (althans zo lijkt het).
Na een hoop gezoek lijkt of blijkt, dat de driver of de library een signal verstuurt, SIGUSR2 om precies te zijn. Prog A doet hier niks mee (die kent helemaal geen signals) en het signal gaat (denk ik?) door naar de parent van prog A, prog B dus, die kan hier niet tegen en gaat onderuit, en sluit daarbij ook prog A af (andersom dus als de 1e analyse).
Nou heb ik om e.e.a. even te checken aan prog A een signal handler toegevoegd die alle SIGUSR2 's afvangt en een regeltje in een logfile zet alvorens de signals door te geven aan de oorspronkelijke signal handler. En nu blijkt dat dat signal zo'n beetje bij elke call naar de API verstuurd wordt (ca. 40 keer per seconde).... Mijn signal handler vangt dat dus nu af, stuurt hem naar de oorspronkelijke handler (in de lib) en die handelt e.e.a. af (maar heel soms niet goed dus, waarna het signal kennelijk weer "naar boven" gestuurd wordt). Mijn gevolgtrekking nu is, dat de device driver communiceert met de library d.m.v. dit signal.
Vraag: is dit normaal gedrag voor een device driver?? Ik ging er tot dusverre van uit dat signals alleen verstuurd worden in uitzonderlijke situaties. De library/driver zijn namelijk in opdracht gemaakt, en als die zondigen tegen algemeen gangbare regels, gaan we ermee terug...
[ Voor 9% gewijzigd door Verwijderd op 23-08-2004 14:22 ]