Re[2]: Вызов C++ из C под линукс
От: _Artem_ Россия  
Дата: 27.04.11 05:33
Оценка:
Здравствуйте, skeptic, Вы писали:

S>new/delete не переопределяли?

S>Насколько я понимаю в nginx свои функции для управления памятью и юзать нужно их.
S>Ну и поподробней можно суть проблемы? А то не полнятно что вызываете и чего после этого корявится
Нет, new и delete родные c++. В модуль передается указатель ngx_http_request_t дальше из запроса выбирается заголовок и происходит определенная обработка. Вот код функции которая вызывается из nginx:
int request_handler(ngx_http_request_t * r)
{
    try {
        headers_t headers;
        make_headers(r, headers);

        boost::shared_ptr<RequestHandler> h(CreateRequestHandler(headers));

        NginxRequestHandlerCallback cb(r);
        h->HandleRequest(cb);
        headers_t headers_out;
        cb.SendResponseHeader(200, headers, true);
    }
    catch(std::exception & e)
    {
        NginxRequestHandlerCallback::SendErrorStatus(400, e.what(), r);
    }

    return 200;
}


После выхода из этой функции значение поля r->cleanup изменяется с 0 на 1. Видимо кто-то что-то там трет))) И потом, когда запрос очищается, вот здесь возникает попытка обратиться к неинициализированной памяти SIGSEG что-ли звучит
    for (cln = r->cleanup; cln; cln = cln->next) {
        if (cln->handler) {
            cln->handler(cln->data);
        }
    }


Сейчас попробую память брать у nginx.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.