[Kos-dev] "Race condition" 1

Thomas Petazzoni kos-dev@enix.org
Mon, 26 May 2003 10:12:17 +0200


This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enig768AD6CA1A9028E6CE99E088
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

Hello,

> A mon avis il faut privilegier la premiere explication (ie
> tester...)..., puis faire :

Effectivement, ce doit être la première explication qui est correcte :
dans le cas d'un nouveau thread, juste après le changement de contexte,
on ne va pas se retrouver au niveau du get_there de _cpl0_switch_asm.S,
mais bien au tout début du thread, et donc le bout de code que tu donnes
plus bas corrigerait le probleme *a priori*.

Ceci dit, il me semble qu'il y a de toute façon un problème si le thread
n'est pas nouveau. Quand un thread qui n'est pas nouveau va reprendre
son éxécution grâce au iret de cpl0_switch_with_return_internal, les
interruptions vont éventuellement être réactivées (si elles étaient
activées au moment où le thread a été interrompu), et on peut donc être
préempté entre le moment ou cet "iret" réactive les interruptions, et le
moment ou on va tester le thread_to_be_destroyed pour éventuellement le
supprimer (dans cpl0_switch_with_return).

Il me semble clair qu'on a pas la garantie que cpl0_switch_with_return
s'éxécute en un seul bloc, sans interruptions.

> Pour les semaphores, faudrait reflechir en effet, pour le moment je
> pense que ce serait plus propre de passer un spinlock en parametre. Le
> probleme que je me pose c'est "est-ce qu'on risque pas", avec
> l'empilement de nos synchro les unes sur les les autres (kmsg / ksem /
> kwq), "d'avoir besoin de relacher *plusieurs* wq au moment du
> switch"...

"au moment du switch" ?

En ce qui concerne le passage du spinlock en paramètre, il faudra passer
un pointeur, et donc toutes les macros *_spin_* ne fonctionneront pas.

> En tous cas, Merci Thomas. Je suis arrive a 1h30 ce matin a Rennes,
> soit 1h plus tard que prevu. Ce matin, c'est dur.

Aïe 1h30 du matin, oui je comprends que ça a du être dur ce matin !

Bonne journée,

Thomas
-- 
PETAZZONI Thomas - thomas DOT petazzoni AT enix DOT org - UIN : 34937744
Web: http://www.enix.org/~thomas/
KOS: http://kos.enix.org/ - Lolut: http://lolut.utbm.info
Fingerprint : 0BE1 4CF3 CEA4 AC9D CC6E  1624 F653 CB30 98D3 F7A7

--------------enig768AD6CA1A9028E6CE99E088
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQE+0cxh9lPLMJjT96cRAjIaAKCTBcii12Y/SCfH8BRuoj1b+2fzbQCeJ67x
oYYSYvY2yBa/7hvexLuHE0k=
=1ojJ
-----END PGP SIGNATURE-----

--------------enig768AD6CA1A9028E6CE99E088--