* do the work.
*/
UpdateChecker::UpdateChecker ()
- : _buffer (new char[BUFFER_SIZE])
+ : _buffer (BUFFER_SIZE)
, _state (State::NOT_RUN)
{
_curl = curl_easy_init ();
curl_easy_setopt (_curl, CURLOPT_WRITEFUNCTION, write_callback_wrapper);
curl_easy_setopt (_curl, CURLOPT_WRITEDATA, this);
curl_easy_setopt (_curl, CURLOPT_TIMEOUT, 20);
+ curl_easy_setopt (_curl, CURLOPT_NOSIGNAL, 1L);
string const agent = "dcpomatic/" + string (dcpomatic_version);
curl_easy_setopt (_curl, CURLOPT_USERAGENT, agent.c_str ());
} catch (...) {}
curl_easy_cleanup (_curl);
- delete[] _buffer;
}
int r = curl_easy_perform (_curl);
if (r != CURLE_OK) {
set_state (State::FAILED);
- return;
+ continue;
}
/* Parse the reply */
_buffer[_offset] = '\0';
- string s (_buffer);
+ string s (_buffer.data());
cxml::Document doc ("Update");
doc.read_string (s);
UpdateChecker::write_callback (void* data, size_t size, size_t nmemb)
{
size_t const t = min (size * nmemb, size_t (BUFFER_SIZE - _offset - 1));
- memcpy (_buffer + _offset, data, t);
+ memcpy (_buffer.data() + _offset, data, t);
_offset += t;
return t;
}
{
boost::mutex::scoped_lock lm (_data_mutex);
_state = s;
- _emits++;
}
emit (boost::bind(boost::ref(StateChanged)));