Wie sollen sich POSIX-Cancel-Punkte verhalten?

9

Ich habe die Implementierung der Abbruchpunkte von glibc / nptl untersucht und mit POSIX verglichen, und wenn ich mich nicht irre, ist das völlig falsch. Das verwendete Grundmodell ist:

%Vor%

Nach POSIX:

  

Die Nebeneffekte des Einwirkens auf eine Abbruchanforderung, während sie während eines Aufrufs einer Funktion unterbrochen sind, sind die gleichen wie die Nebenwirkungen, die in einem single-threaded-Programm auftreten können, wenn ein Aufruf einer Funktion durch ein Signal unterbrochen wird und die gegebene Funktion gibt [EINTR] zurück. Solche Nebenwirkungen treten auf, bevor Stornierungsbereinigungshandler aufgerufen werden.

Wenn ich% code% anrufe, kann ich erwarten, dass entweder abgebrochen wird (zusammen mit meinem ganzen Thread), bevor es die Datei nicht öffnet oder , um einen gültigen Dateideskriptor oder -1 und open -Wert zurückzugeben, aber niemals einen neuen Dateideskriptor zu erstellen, dann diesen in das void zu verlieren. Auf der anderen Seite scheint die glibc / nptl-Implementierung von Abbruchpunkten eine Race-Bedingung zu ermöglichen, bei der die Abbruchanforderung unmittelbar nach dem Zurücksenden des syscall auftritt, aber bevor errno stattfindet.

Bin ich verrückt oder ist ihre Umsetzung wirklich so kaputt? Und wenn ja, erlaubt POSIX ein solches kaputtes Verhalten (was die Annullierung vollständig unbrauchbar macht, wenn Sie es nicht manuell verschieben), oder ignorieren sie POSIX schlicht und einfach?

Wenn dieses Verhalten tatsächlich gebrochen ist, was ist der richtige Weg, es ohne eine solche Race Condition zu implementieren?

    
R.. 18.11.2010, 09:18
quelle

1 Antwort

4

Ist dies nicht im nächsten Absatz der Norm geklärt?

  

Allerdings, wenn der Thread bei suspendiert ist   ein Absagepunkt und das Ereignis für   was es wartet, tritt vor dem   Stornierungsanfrage wird darauf reagiert   ist nicht angegeben, ob die   Stornierungsanfrage wird bearbeitet oder   ob die Stornierungsanfrage   bleibt ausstehend und der Thread wird fortgesetzt   normale Ausführung.

Was impliziert, dass diese Rassenbedingung vollkommen legales Verhalten ist.

    
cmeerw 18.11.2010, 14:49
quelle

Tags und Links