[LiSA-Devel] CLI questions

Ionut Nicu ionut.nicu at ines.ro
Mon Jun 15 23:58:18 EEST 2009


Salut,

On Mon, 2009-06-15 at 00:40 +0300, Faur Andrei wrote:

> Problema e ca la crearea unei noi sesiuni in functia
> rstp_session_start (apelata de macroul .._OPEN) aceasta
> nu se salveaza nicaieri. Astfel, la un al doilea apel, se
> creeaza o noua sesiune ceea ce inseamna de fapt incercarea
> redeschiderii unui capat al cozii de mesaje. Aceasta da fail,
> dat fiind ca aceasta coada a mai fost deschisa deja din acest
> proces.

Nope, nu e asta. Daca era asa ar fi iesit cu "File exists"...
In plus, mq_open pe coada de receive se face cu O_CREAT|O_RDONLY,
deci fara O_EXCL. Daca am fi avut si O_EXCL atunci s-ar fi justificat
eroarea ...

M-am uitat pe cod si intr-adevar era un bug in cdp_session_end. Mai
exact, se facea mq_unlink la send queue (cea deschisa de catre
server/cdpd). Coada asta trebuie sa fie stearsa numai de catre server
(cdpd), nu de client (swcli). Am facut push la un fix pentru problema
asta pe branch-ul master din tree-ul de lisa.

PS: Macro-urile CDP_SESSION_OPEN/CDP_SESSION_CLOSE sunt facute dupa
aceeasi idee ca si SW_SOCK_OPEN/SW_SOCK_CLOSE, si anume:

* permit reutilizarea aceluiasi file descriptor (sw socket) sau
a aceleiasi sesiuni client cdp (respectiv message queue descriptorii
pentru cozile de send/receive de cdp) intre command handleri diferiti,
in cazul in care se face store la sock_fd sau cdp session in structura
de context. Asta e util in anumite cazuri cum ar fi rutinele de
incarcare a configuratiei switch-ului (swcfgload).

* in mod normal, daca nu se face store la fd-ul (sau pointer-ul la cdp
session) returnat de macro-ul de open in context, atunci se va face
open/close in mod normal.

Ionut.




More information about the LiSA-Devel mailing list