Функция Closehandle() windows Зависает
У меня возникла проблема с функцией windows closeHandle((Handle)port) в нашем файле .dll. it не возвращается. Проблема возникает каждые несколько часов.
Приложение java, использующее .dll подключается, считывает и записывает данные. Последний вызов метода java-приложение делает для записи данных, и немедленно вызывается метод release, который вызывает функцию closeHandle в JNI.
Неужели CloseHandle не возвращается, потому что запись все еще происходит? Есть ли способ изящно вернуться к нормальному состоянию, когда closeHandle зависает/ не возвращается. Заранее спасибо.
Ниже приведен код функции, вызывающей closeHandle.
{ HANDLE port; jfieldID portFID = GetFieldId(env, jthis, "portnbr", "J"); if ( portFID == 0 ){ flog("ERROR: Java_com_hctsi_comm_Serial_close() portFID=0\n"); return; } port = (HANDLE)env->GetLongField(jthis, portFID); if ( 0 != port ) { flog("Java_com_hctsi_comm_Serial_close() port %d\n", port); int count = 0; while ( !CloseHandle((HANDLE)port) && count < 10 ) { flog("ERROR Java_com_hctsi_comm_Serial_close() closeHandle failed with an error %d\n", count, port, GetLastError); flog("ERROR Java_com_hctsi_comm_Serial_close() failed count %d port %d\n", count, port); count++; Sleep(1000); } env->SetLongField(jthis, portFID, (jlong)0); } CloseLog(); }
Что я уже пробовал:
Я ничего не пробовал, потому что это трудно воспроизвести на моем локальном компьютере, но это происходит в производстве с перерывами.
11917640 Member
Единственная причина, которую я вижу, - это неправильное значение дескриптора, переданное CloseHandle. В таком случае результат CloseHandle не определен.