Speicherzugriffsfehler mit libcurl, pthreads und https



  • Hallo verehrte Gemeinde!

    ich schreibe mir derzeit für meine Website eine Anwendung, die Daten von Google sowie Amazon sammelt und diese anschließend in einer MySQL Datenbank speichert. Soweit funktioniert das auch alles und ich habe den Quelltext unter der MPL hier veröffentlicht: http://code.google.com/p/kammerath-network-collector/source/browse/src/kammerath-network-collector.cpp

    Meine Hauptproblem ist nun, dass zwar die ersten Aufrufe mit CURL einwandfrei funktionieren. Die HTTP Anfragen innerhalb von pthreads verursachen jedoch bei "curl_easy_perform" SegFaults (Speicherzugriffsfehler). Ich erstelle innerhalb des Threads (s.u.) extra eine neue Instanz von GoogleAnalyticsClient, um einen neuen CURL Handle zu erzeugen. Die CURL Doku sagt, dass man Handles auf garkeinen Fall parallel benutzen soll.

    /* method does performs the query action
     * within the threads created in the main */
    void* processAlsoViewedPages(void* ptr){
            processAlsoViewedPagesArgs *args = (processAlsoViewedPagesArgs*)ptr;
    
            GoogleAnalyticsClient *ga = new GoogleAnalyticsClient(args->accountList);
            ga->setCurlHandle(args->curlHandle);
            // map<string, int> result = ga->getTopAlsoViewedPages(args->articleUrl);
    
            cout << "THREAD: " << args->articleUrl << endl;
    }
    

    Ich würde mich riesig freuen, wenn Jemand von Euch ein paar heiße Tipps hat, da ich mittlerweile daran verzweifle. In einer anderen Anwendung, die nicht SSL verwendet, habe ich die Implementierung analog durchgeführt und dort bekomme ich keine SegFaults. Den vollständigen Code könnt Ihr, wie gesagt, unter dieser URL einsehen: http://code.google.com/p/kammerath-network-collector/source/browse/src/kammerath-network-collector.cpp

    Vielen Dank im Voraus!

    Jan


Anmelden zum Antworten