Fehler in Uebungsfolien 9

Returnwerte in Folien stimmen nicht und so.

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Fehler in Uebungsfolien 9
Auf Seite 8 und 9 steht, dass fuer die Funktionen pthread_create und pthread_join im Fehlerfall -1 zurueck kommt und errno gesetzt wird, allerdings stimmt das nicht. Laut man page kommt 0 bei Erfolg und ein positiver Fehlercode im Fehlerfall zurueck.

Vielleicht liests ja jemand vom Lehrstuhl und kanns fuer die Zukunft auch ausbessern :wink:


Uhm genau genommen steht in der manpage, dass im Erfolgsfall 0 und im Fehlerfall ein non-zero Wert, worunter auch -1 faellt, zurueckgegeben
wird. Klar steht hier nicht, dass immer -1 zurueck gegeben wird. Vielleicht
bessert juk es ja aus :wink:


hi,

und interessant waere auch noch zu wissen, ob dieser fehlercode aequivalent zu errno ist und ob dieses gesetzt wird.
ich habe nichts gefunden, bezueglich dem setzten (manpage, etc)

mfg, hnzi


Achja, mit positiv war ich etwas voreilig :frowning:


Der Rückgabewert entspricht dem, was eigentlich in die errno geschrieben würde.


Das stimmt -1 ist falsch. Ist mir in der Freitagsuebung auch aufgefallen. Ich denke
in einem alten POSIX-Draft von 1996 stand noch -1. Wegen dem errno-Problem
wurde das wohl spaeter noch geaendert. Auch wenn das errno-Problem anders
auch noch geloest wurde.

:finger: Ach ja, das errno-Problem ist Euch doch sicher bewusst, oder?

==========================================================

Thread 1                                               Thread 2

 Funktionsaufruf mit Fehler setzt
 die errno.

Wird unterbrochen ----------------------> Funktionsaufruf mit Fehler setzt
                                                               die errno oder veraendert die errno
                                                               aus einem anderen Grund (readdir).

                                    <------------------ wird unterbrochen

 ruft perror() auf oder reagiert
 auf den Fehler von Thread 2.

=========================================================

Frage: Wie wurde dieses Problem geloest? Oder wie wuerdet Ihr das Problem
loesen? :listen:

Wie Ihr wisst lesen wir im Forum, aber Ihr duerft solche Hinweise auch ruhig
an i4sos@informatik.uni-erlangen.de schicken. Dann seit Ihr sicher das wir
es lesen. :wink:


[quote]
#ifndef ASSEMBLER
/* Function to get address of global `errno’ variable. */
extern int *__errno_location (void) __THROW attribute ((const));

#if !defined _LIBC || defined _LIBC_REENTRANT
/* When using threads, errno is a per-thread value. /
#define errno (
__errno_location ())
#endif
#endif /* !ASSEMBLER /
#endif /
_ERRNO_H */
[/quote] (aus bits/errno.h, die in errno.h ggf. inkludiert wird)

Scheinbar wirds durch einen Funktionsaufruf geloest, der dafuer sorgt, dass jeder Thread eine eigene hat, anstatt eine einzige globale Variable fuer errno zu halten.