libcurl (7.19,7) падает с _mdns_query_callback на OSX (10.6.8) - PullRequest
2 голосов
/ 19 августа 2011

мое приложение зависает при использовании libcurl по неизвестной причине. Он самопроизвольно зависал после многих циклов одного и того же кода при использовании Guard Malloc.

Информация о версии Libcurl:

curl 7.19.7 (universal-apple-darwin10.0) libcurl / 7.19.7 OpenSSL / 0.9.8r Протоколы zlib / 1.2.3: tftp ftp telnet dict ldap http файл https ftps Особенности: GSS-переговоры IPv6 Largefile NTLM SSL libz

Исходник:

char * process_url(char * url,char * post){
    CURLcode res;
    curl_easy_reset(curl);
    if(curl){
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
        curl_easy_setopt(curl, CURLOPT_POSTREDIR,CURL_REDIR_POST_ALL);
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION,1L);
        curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.107 Safari/535.1");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,write_to_string);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
        if (post) {
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post);
        }
        ResponseStruct result;
        result.response = malloc(sizeof(char));
        result.response[0] = '\0';
        result.length = 1;
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &result);
        res = curl_easy_perform(curl); //CRASHED HERE
        if (res) {
            printf("CURL FAILED WITH ERROR CODE %i\n",(int)res);
            return NULL;
        }
        sec_sleep(1); //Prevent passing float limit.
        return result.response;
    }
    return NULL;
}

Вот стек функций:

#0  0x7fff869d22ae in _mdns_query_callback
#1  0x7fff869bfc29 in handle_query_response
#2  0x7fff869bf08b in DNSServiceProcessResult
#3  0x7fff869d1a71 in _mdns_query_mDNSResponder
#4  0x7fff869d0c61 in _mdns_search
#5  0x7fff869cfffc in _mdns_addrinfo
#6  0x7fff869cf059 in search_addrinfo
#7  0x7fff869cea7a in si_addrinfo
#8  0x7fff869ce48d in getaddrinfo
#9  0x7fff831695fc in Curl_getaddrinfo_ex
#10 0x7fff83164a3d in Curl_getaddrinfo
#11 0x7fff8313dda3 in Curl_resolv
#12 0x7fff8313dfb6 in Curl_resolv_timeout
#13 0x7fff8314b225 in resolve_server
#14 0x7fff83150aaf in create_conn
#15 0x7fff83150c08 in Curl_connect
#16 0x7fff8315b817 in Curl_perform
#17 0x100001126 in process_url at main.c:90
#18 0x1000013f7 in cancel_outstanding_order at main.c:158
#19 0x100002aac in main at main.c:554

В программе не используются темы. Я проверил свои данные в отладчике, и это нормально. libcurl что-то не нравится Есть ли решения?

Спасибо.

1 Ответ

1 голос
/ 20 августа 2011

getaddrinfo () - это вызов libc, который обеспечивает ваша операционная система (OS X).

Поскольку libcurl использует точно такую ​​же функцию разрешения имен для многих операционных систем, где она не падает, я бы сказал, что онауказывают, что проблема действительно в OS X, а не в libcurl.

Я никогда не видел эту ошибку, хотя это странно, если это действительно ошибка в OS X, но я также никогда не видел, чтобы о ней сообщалина libcurl.Возможно, это говорит о том, что проблема скорее в вашем приложении ...

Если вы можете повторить проблему с помощью автономной программы-примера, предоставьте ее в проект curl и попросите их (нас) помочьвы отлаживаете это может быть идея.Если вы не можете повторить это с маленькой программой, это будет еще одним признаком того, что проблема скорее связана с вашим приложением!

...