Jen bych upozornil, že pthread_cleanup_xxx AFAIK nejsou funkce, ale makra, která se z hlediska uživatele expandují mimo jiné do { či }. Takže je více než vhodné je mít ve stejné úrovni zanoření - nelze to mít např. ve větvi if, zapouzdřené v separátní funkci a pod.