Падение программы на вызове GrdUnInitializeNotificationAPI
Здравствуйте! В нашем приложении используются ключи GuardantCodeTime. Примерная функция проверки лицензии выглядит следующим образом:
HANDLE hHandle = INVALID_HANDLE_VALUE;
int CheckLicense()
{
// Результат работы функции
int res = -1;
// Наличие ключа
bool keyOk = false;
// Проверка наличия ключа
if(hHandle == INVALID_HANDLE_VALUE || GrdCheck(hHandle) != GrdE_OK)
{
// Поиск и подключение к ключу
if((GrdStartup() == GrdE_OK) &&
(GrdCreateHandle(hHandle) != INVALID_HANDLE_VALUE) &&
(GrdSetAccessCodes(hHandle, ...) == GrdE_OK) &&
(GrdFind(hHandle, ...) == GrdE_OK) &&
(GrdSetWorkMode(hHandle, ...) == GrdE_OK) &&
(GrdLogin(hHandle) == GrdE_OK))
{
keyOk = true;
// Возникли ошибки при подключению к ключу
} else {
GrdCloseHandle(hHandle);
hHandle = INVALID_HANDLE_VALUE;
GrdCleanup();
}
} else {
// Ключ присутствует и уже был проинициализирован
keyOk = true;
}
if(keyOk)
{
// Вызов внутренних функций ключа для проверки лицензии
res = GrdCodeRun(...)
...
}
return res;
}
Когда ключ подключен, функция проверки отрабатывает без ошибок, но когда ключа нет, то после 3-4 часов работы функции, возникает исключение SIGSEGV. Последняя успешно выполненная функция, которая отображается в отладчике - GrdUnInitializeNotificationAPI. Как я понимаю данная функция реализована в библиотеке GrdAPI.
При отсутствии ключа выполняется следующий набор функций GrdStartup, GrdCreateHandle, GrdSetAccessCodes и на функции GrdFind происходит ошибка, из-за которой происходит вызов функций GrdCloseHandle, GrdCleanup. Еще хотелось бы отметить, что при подключенном ключе функция проверки вызывается раз в несколько минут, а при отсутсвии раз в 5 секунд. В чем может быть проблема?