[osy] Re: Prenos hodnoty makra do jinych zdrojaku

  • From: Jiri Horky <jiri.horky@xxxxxxxxx>
  • To: osy@xxxxxxxxxxxxx
  • Date: Mon, 03 Nov 2008 13:50:28 +0100

Ahoj,

myslim, ze to je celkem normalni reseni. Jinak se to da jeste delat tak, ze DEBUG_MUTEX definujes pri prekladu volbou -D gccku, tzn to nezalezi na tom, v kterem souboru to je nebo neni zadefinovnae.

Jirka H.


Lukas Jezek wrote:
Zdarec,

narazil jsem na problem: kdyz mam v zavislosti na hodnote makra DEBUG_MUTEX umirat na odblokovani mutexu cizim vlaknem nebo si toho nevsimat, tak potrebuju dostat tento symbol do prekladu meho souboru mutex.c Coz ale nejde, pokud je tento debuzici symbol definovan napriklad v testu (mutex5/test.c)...

Zatim jsem to ve spolupraci s Jarou vyresili tak, ze je misto funkce definovano makro mutex_unlock, ktere se rozexpanduje na volani funkci v zavislosti na hodnote toho symbolu... Mozna to je takle lepsi a jedine spravne a mozne, nevim...

Vypada to nejak takhle:

// mutex.h

extern void mutex_unlock_check(struct mutex * mtx);
extern void mutex_unlock_do(struct mutex * mtx);

#if DEBUG_MUTEX >= 1
#define mutex_unlock(mtx) {\
    ipl_t state = query_and_disable_interrupts();\
    mutex_unlock_check(mtx);\
    mutex_unlock_do(mtx);\
    conditionally_enable_interrupts(state);\
}
#else
#define mutex_unlock(mtx) { mutex_unlock_do(mtx); }
#endif


P.S. Testy na mutexy uz skoro vsechny fungujou, ale u 1 (cislo 3) asi dochazi k deadlocku :-(

L.



Other related posts: