помогает клиенту решить проблему, с которой они сталкиваются. Я больше парень-системный администратор, поэтому я боюсь помочь им. Они говорят, что это ошибка в ядре/среде, я пытаюсь либо доказать, либо опровергнуть это, прежде чем я настаиваю на том, что он находится в их коде или ищет поддержку поставщика для ОС.
Случается в Red Hat и Oracle Enterprise Linux 5.7 (и 5.8), приложение написано на С++
Проблема, с которой они столкнулись, заключается в том, что основной поток запускает отдельный поток для создания потенциально долговременного подключения TCP connect() [client to server]. Если "длительный" аспект занимает слишком много времени, они отменяют поток и запускают другой.
Это делается потому, что мы не знаем состояние серверной программы:
- серверная программа работает → соединение немедленно принято
- серверная программа не работает, машина и сеть в порядке → соединение немедленно не удалось с ошибкой "connection отказано"
- машина или сеть сбой или сбой → соединение занимает много времени с ошибкой "нет маршрута к хосту"
Проблема заключается в том, что отмена потока, который заблокировал мьютекс (с обработчиками очистки, настроенными для разблокировки мьютекса) иногда НЕ разблокирует мьютексы.
Это оставляет основной поток, зависящий от попытки блокировки мьютекса.
Подробная информация об окружающей среде:
- Glibc-2.5-65
- Glibc-2.5-65
- libcap-1.10-26
- ядро-отладки 2.6.18-274.el5
- Glibc-заголовков-2.5-65
- Glibc-синфазный 2.5-65
- libcap-1.10-26
- ядро-док-2.6.18-274.el5
- ядро-2.6.18-274.el5
- ядро-заголовков-2.6.18-274.el5
- Glibc-разви-2.5-65
Код был создан с: С++ -g3 tst2.C -lpthread -o tst2
Приветствуются любые советы и рекомендации