sem_timedwait är en luring när man jobbar med semaforer. Jag vet inte hur många gånger vid det här laget som jag ramlat ner i det djupa hålet och träffat botten där nere i idioternas håla med hård kraft. Igår kväll gjorde jag det igen. Japp, kommer säkert göra det igen och igen dessutom. Jodå, jag vet.
Grejen är att ALLT annat man jobbar med och som har en timeout har just en sådan. En timeout. Vill man ha en timeout på 500 millisekunder så skickar man in 500. Logiskt och bra,
Men…
sem_timedwait använder sig av en absolut tid räknad från epochen. Vill man ha en timeout på 500 millisekunder så får man alltså addera… vänta nu, jo, till en struktur som består av sekunder och nanosekunder. Ja och adderar man bara nanosekunder så kan dom såklart flöda över och krångla till det.
Den som kodade den här en gång i tiden var antingen full eller pårökt. Det är jag helt säker på.
Så nästa gång “dina grejer” toppar CPU statistiken så vet du var du skall leta.