2016-06-20 7 views
1

libcurlを使用してファイルをリモートHttpサーバーにチャンクアップロードします。以下の関数をコールバックパラメータを登録するためにREADDATAとREADFUNCTIONに設定する関数を呼び出します。しかし、curl_easy_perform()中にlibcurlがクラッシュします。誰でも助けてくれますか?私は何と呼ばれるおかげファイルをアップロードするためにREADDATAとREADFUNCTIONを設定すると、libcurlがfwrite()でクラッシュする

ReadCallbackStatic(void *contents, size_t size, size_t nmemb, void *userp); 
curl_easy_setopt(curl_data.m_lib_curl_handle_ptr, CURLOPT_READFUNCTION, ReadCallbackStatic); 
curl_easy_setopt(curl_data.m_lib_curl_handle_ptr, CURLOPT_READDATA, userdata); 

スタックトレース:私はあまりにもCURLOPT_WRITEDATAとCURLOPT_WRITEFUNCTIONを設定するために持っているよう

(gdb) bt 
#0 0x00007ffff604741a in fwrite() from /lib64/libc.so.6 
#1 0x00007fffec8713f3 in Curl_client_write() from libcurl.so 
#2 0x00007fffec8851b7 in Curl_readwrite() from libcurl.so 
#3 0x00007fffec885ea7 in ??() from libcurl.so 
#4 0x00007fffec886a28 in Curl_perform() from libcurl.so 
#5 0x00007fffec8873c6 in curl_easy_perform() from libcurl.so 
+2

[MCVE](http://stackoverflow.com/help/mcve)と実際のスタックトレースを提供してください。 – paddy

+0

[Jayは既に回答済み](https://github.com/curl/curl/issues/886#issuecomment-227044315)をカールバグの問題に適切に回答しましたが、両方の場所でコードが見逃されています。これはユーザーエラーの可能性が最も高いです。 –

+0

@paddyスタックトレースを追加しました。ありがとう。 –

答えて

0

が見えます。クラッシュは、http POST応答データを処理するためにデフォルトでlibcurlによって使用されるfwrite()で発生します。 CURLOPT_WRITEFUNCTIONを設定すると、クラッシュが消えます。レスポンスデータがstdoutではなくfwrite()に送信されるのはなぜですか?

+0

私は大きなプロジェクトを担当しており、ここにコード全体を表示するのは難しいです。 CURLOPT_WRITEFUNCTIONとCURLOPT_WRITEDATAの両方を設定する必要があります。そうでなければ、スタックトレースの下でプロセスがクラッシュします。書き込みデータと関数が設定されていない場合、libcurlはデフォルトでfwrite()を呼び出します。私は私のプロジェクトでいくつかのコードはCURLOPT_WRITEFUNCTIONとCURLOPT_WRITEDATAのデフォルト値を設定しないと思います。 libcurlの関数()が上記の2つのオプションのデフォルト値を設定解除できることは知っていますか?ありがとう。 –

関連する問題