Reusing a libcurl based url() connection can lead to a crash:

  con <- url("http://httpbin.org/get";, method = "libcurl")
  readLines(con)
  readLines(con)
  readLines(con)

The problem does not appear for other url() implementations:

  con <- url("http://httpbin.org/get";, method = "internal")
  readLines(con)
  readLines(con)

  con <- curl::curl("http://httpbin.org/get";)
  readLines(con)
  readLines(con)

>From the internet/libcurl.c source code it looks like the free() calls
should be moved out of Curl_close() and into the destroy callback
(which is currently undefined?). Comments from Connections.h suggest
that the close callback should reset, but not destroy the connection
so that it can be recycled:

  void (*close)(struct Rconn *); /* routine closing after auto open */
  void (*destroy)(struct Rconn *); /* when closing connection */

The 'curl' package has a working example how to achieve this with libcurl.

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to