Salut,
Je vous explique la situation : j'ai un thread qui est en attente sur un Read de socket. Je passe par un select pour gérer un timeout.
De temps en temps, j'ai besoin de terminer ce thread. J'avais tout d'abord essayer de le faire se terminer normalement en simulant une déconnexion du client (en fermant la socket) ; mais pour je ne sais quelle raison, lorsque je ferme sa socket, il ne sort pas du select.
J'ai donc cherché du côté de pthread_cancel. Mais alors là, j'ai des bugs que je ne comprends pas.
Une fois mon thread lancé, je lui mets l'état "PTHREAD_CANCEL_ASYNCHRONOUS" qui permet de terminer le thread instantanément après l'appel de pthread_cancel (lorsque je suis dans des sections critiques, je fais tout simplement un "PTHREAD_CANCEL_DISABLE").
Donc dans 99% du temps, mon thread peut être terminé à tout moment. Maintenant lorsque je fais un appel à pthread_cancel, j'ai une exception qui part et que je ne peux rattraper avec rien d'autre que "...". Le problème c'est que si je ne relance pas cette exception j'ai un Abort avec "FATAL: exception not rethrown" et si je relance l'exception (ou si tout simplement je ne la catch pas), j'ai un Abort avec "terminate called without an active exception".
J'ai essayé pas mal d'autres choses, comme faire un pthread_exit(0) dans mon catch mais ceci fait crasher l'application aussi.
J'ai fait pas mal de recherches, mais là je ne comprends pas ce qu'il se passe.
Voilà, si quelqu'un pourrait m'apporter des informations concernant ce problème ?
Merci ^^
Partager