Обрыв долгоработающей С-процедуры

Hordi
Дата: 09.06.2004 11:21:12
Приветствую.

Планирую написать серверную С-процедуру, которая будет обрабатывать данные из довольно больших таблиц. Соответственно по времени все это будет проходить достаточно долго + возможно будут открываться файлы и инфа будет сбрасываться в них.
Вызываться она будет из программы-клиента. Так вот, интересует, а что будет, если во время выполнения этой процедуры соединение с программой-клиентом оборвется(обрыв шнурка, принудительное закрытие соединения через PQfinish, выключение компа клиента или что угодно), в смысле - процедура будет продолжать работу или как?

Спасибо
wbear
Дата: 09.06.2004 13:16:17
будет ,пока не завершится.. а как завершится вывалиса ошибка.. да блин напиши функцию
aaa(){
sleep(10);
}
и посмотри что будет. а как функции сообщить что типа пора заканчивать кога клиент сказал PQFinish или disconnectнулся я так и не нашел..если что нибудь придумаешь или найдешь сообщи..буду благодарен
LeXa NalBat
Дата: 09.06.2004 13:20:01
Может быть постгрес получит сигнал SIGPIPE? Если так, то в С-процедуре написать обработчик и делать, что вам захочется.
wbear
Дата: 09.06.2004 15:44:01
неа,при обычном дисконнекте не получит, разве что когда данные клиенту начнет отсылать.. а это будет происходить скорее всего когда функция уже завершится
wbear
Дата: 09.06.2004 19:59:54
тут появилась идея правда не совсем красивая да и проверить надо.. вобщем приблезительно так:
делаеса вторая процедурка которая нужному Pidу(в котором крутица сишная процедурка) посылает сигнал какой-нибудь.. и выстовляет где-нибудь(таблица сиквенс и т.п.)время жизни сишной процедурке.. ( типа еще тебе работать 20 минут) соответвенно в клиэнте делаеш вызов сишной функции асинхронно.. и пока она не выполнится переодически (каждые 20 минут) вызываеш вторую процедурку по второму коннекту.. соответсвенно при аварийном дисконекте сишная функция будет крутица максимум 20 минут,секунд и т.п.