This is an automated email from the git hooks/post-receive script.

glondu pushed a commit to branch master
in repository ocurl.

commit 870385a78fe63b5e907677b215372dbf74e987ce
Author: Stephane Glondu <st...@glondu.net>
Date:   Tue Feb 23 10:41:54 2016 +0100

    Imported Upstream version 0.7.2
---
 CHANGES.txt          |  6 ++++++
 Makefile.in          |  8 ++++----
 configure            | 18 +++++++++---------
 configure.in         |  2 +-
 curl-helper.c        | 30 ++++++++++++++++++++++++------
 curl_lwt.ml          |  6 ++++--
 examples/Makefile.in |  4 ++--
 7 files changed, 50 insertions(+), 24 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 57ab9c7..8ff637b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,9 @@
+0.7.2  -  23 Sep 2014
+
+    * fix Curl.duphandle wrt CURLOPT_DNS_SERVERS
+    * lwt: fix memory leak
+    * Multi: keep Curl.t alive
+
 0.7.1  -  12 May 2014
 
     * Multi: win32 support (arirux)
diff --git a/Makefile.in b/Makefile.in
index caa1c41..5a8eefd 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -16,7 +16,7 @@ OCAMLOPT = @OCAMLOPT@
 OCAMLDEP = @OCAMLDEP@
 OCAMLMKLIB = @OCAMLMKLIB@
 
-FLAGS          =
+FLAGS          = -g
 LIBS           =
 
 CFLAGS         = @CFLAGS@ @DEFS@ -Wall
@@ -67,13 +67,13 @@ curl.cmxa:  $(CURLOBJS) dllcurl-helper.so
                $(OCAMLMKLIB) -o curl $(CURLOBJS) -oc curl-helper $(CLIBS)
 
 curl_lwt.cmo: curl_lwt.ml
-       $(FINDLIB) c -package lwt.unix -c $< -o $@
+       $(FINDLIB) c -package lwt.unix -c $(FLAGS) $< -o $@
 
 curl_lwt.cmx: curl_lwt.ml
-       $(FINDLIB) opt -package lwt.unix -c $< -o $@
+       $(FINDLIB) opt -package lwt.unix -c $(FLAGS) $< -o $@
 
 curl_lwt.cmi: curl_lwt.mli
-       $(FINDLIB) c -package lwt -c $< -o $@
+       $(FINDLIB) c -package lwt -c $(FLAGS) $< -o $@
 
 .ml.cmx:
                $(OCAMLOPT) -c $(FLAGS) $< -o $@
diff --git a/configure b/configure
index 823e440..8af4888 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for ocurl 0.7.1.
+# Generated by GNU Autoconf 2.69 for ocurl 0.7.2.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -577,8 +577,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='ocurl'
 PACKAGE_TARNAME='ocurl'
-PACKAGE_VERSION='0.7.1'
-PACKAGE_STRING='ocurl 0.7.1'
+PACKAGE_VERSION='0.7.2'
+PACKAGE_STRING='ocurl 0.7.2'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1242,7 +1242,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures ocurl 0.7.1 to adapt to many kinds of systems.
+\`configure' configures ocurl 0.7.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1303,7 +1303,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of ocurl 0.7.1:";;
+     short | recursive ) echo "Configuration of ocurl 0.7.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1383,7 +1383,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-ocurl configure 0.7.1
+ocurl configure 0.7.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1681,7 +1681,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by ocurl $as_me 0.7.1, which was
+It was created by ocurl $as_me 0.7.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -8520,7 +8520,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by ocurl $as_me 0.7.1, which was
+This file was extended by ocurl $as_me 0.7.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -8582,7 +8582,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-ocurl config.status 0.7.1
+ocurl config.status 0.7.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.in b/configure.in
index 8a5024d..6c3106f 100644
--- a/configure.in
+++ b/configure.in
@@ -2,7 +2,7 @@ dnl
 dnl ocurl autoconf input
 dnl
 
-AC_INIT(ocurl,0.7.1)
+AC_INIT(ocurl,0.7.2)
 
 AC_PROG_CC()
 
diff --git a/curl-helper.c b/curl-helper.c
index 36c75d5..b86d7f5 100644
--- a/curl-helper.c
+++ b/curl-helper.c
@@ -10,6 +10,8 @@
 #include <stdlib.h>
 #include <stdarg.h>
 #include <unistd.h>
+/* suppress false gcc warning on seekFunction */
+#define CURL_DISABLE_TYPECHECK
 #include <curl/curl.h>
 
 #include <caml/alloc.h>
@@ -112,6 +114,8 @@ enum OcamlValues
     OcamlSSHHostPublicKeyMD5,
     OcamlCopyPostFields,
 
+    OcamlDNSServers,
+
     /* Not used, last for size */
     OcamlValuesSize
 };
@@ -124,7 +128,7 @@ struct Connection
 
     value ocamlValues;
 
-    size_t refcount; /* number of OCaml heap values referencing this structure 
*/
+    size_t refcount; /* number of references to this structure */
 
     char *url;
     char *proxy;
@@ -1410,6 +1414,10 @@ static Connection *duplicateConnection(Connection 
*original)
         handleCopyPostFields(connection,
                              Field(original->ocamlValues,
                                    OcamlCopyPostFields));
+    if (Field(original->ocamlValues, OcamlDNSServers) != Val_unit)
+        handleDnsServers(connection,
+                         Field(original->ocamlValues,
+                               OcamlDNSServers));
 
     return connection;
 }
@@ -1432,7 +1440,8 @@ static void removeConnection(Connection *connection, int 
finalization)
       {
         fin_url = "unknown";
       }
-      fprintf(stderr,"Curl: handle %p leaked, conn %p, url %s", 
connection->connection, connection, fin_url);
+      fprintf(stderr,"Curl: handle %p leaked, conn %p, url %s\n", 
connection->connection, connection, fin_url);
+      fflush(stderr);
     }
     else
     {
@@ -5492,6 +5501,8 @@ static void handleDnsServers(Connection *conn, value 
option)
 {
   CAMLparam1(option);
 
+  Store_field(conn->ocamlValues, OcamlDNSServers, option);
+
   CURLcode result = CURLE_OK;
   free_if(conn->dns_servers);
 
@@ -6371,6 +6382,7 @@ CAMLprim value caml_curlm_remove_finished(value v_multi)
     {
         Store_field(Field(conn->ocamlValues, OcamlErrorBuffer), 0, 
caml_copy_string(conn->errorBuffer));
     }
+    conn->refcount--;
     /* NB: same handle, but different block */
     v_easy = caml_curl_alloc(conn);
     v_tuple = caml_alloc(2, 0);
@@ -6426,12 +6438,17 @@ CAMLprim value caml_curl_multi_add_handle(value 
v_multi, value v_easy)
 {
   CAMLparam2(v_multi,v_easy);
   CURLM* multi = CURLM_val(v_multi);
-  CURL* easy = Connection_val(v_easy)->connection;
+  Connection* conn = Connection_val(v_easy);
+
+  /* prevent collection of OCaml value while the easy handle is used
+   and may invoke callbacks registered on OCaml side */
+  conn->refcount++;
 
   /* may invoke callbacks so need to be consistent with locks */
   caml_enter_blocking_section();
-  if (CURLM_OK != curl_multi_add_handle(multi, easy))
+  if (CURLM_OK != curl_multi_add_handle(multi, conn->connection))
   {
+    conn->refcount--; /* not added, revert */
     caml_leave_blocking_section();
     failwith("caml_curl_multi_add_handle");
   }
@@ -6444,15 +6461,16 @@ CAMLprim value caml_curl_multi_remove_handle(value 
v_multi, value v_easy)
 {
   CAMLparam2(v_multi,v_easy);
   CURLM* multi = CURLM_val(v_multi);
-  CURL* easy = Connection_val(v_easy)->connection;
+  Connection* conn = Connection_val(v_easy);
 
   /* may invoke callbacks so need to be consistent with locks */
   caml_enter_blocking_section();
-  if (CURLM_OK != curl_multi_remove_handle(multi, easy))
+  if (CURLM_OK != curl_multi_remove_handle(multi, conn->connection))
   {
     caml_leave_blocking_section();
     failwith("caml_curl_multi_remove_handle");
   }
+  conn->refcount--;
   caml_leave_blocking_section();
 
   CAMLreturn(Val_unit);
diff --git a/curl_lwt.ml b/curl_lwt.ml
index c02ac04..93c909f 100644
--- a/curl_lwt.ml
+++ b/curl_lwt.ml
@@ -17,6 +17,7 @@ type multi = {
 
 let create () =
   let mt = M.create () in
+  let timer_event = ref Lwt_engine.fake_event in
   let all_events = Hashtbl.create 32 in
   let wakeners = Hashtbl.create 32 in
   let finished s =
@@ -49,13 +50,14 @@ let create () =
   in
   let on_timer _ =
     if !debug then log "on_timer";
+    Lwt_engine.stop_event !timer_event;
     M.action_timeout mt;
     finished "on_timer"
   in
   M.set_timer_function mt begin fun timeout ->
     if !debug then log "set timeout %d" timeout;
-    let (_:Lwt_engine.event) = Lwt_engine.on_timer (float_of_int timeout /. 
1000.) false on_timer in
-    ()
+    Lwt_engine.stop_event !timer_event; (* duplicate stop_event is ok *)
+    timer_event := Lwt_engine.on_timer (float_of_int timeout /. 1000.) false 
on_timer
   end;
   M.set_socket_function mt begin fun fd what ->
     if !debug then log "set socket fd %d %s" (int_of_fd fd)
diff --git a/examples/Makefile.in b/examples/Makefile.in
index f0c4beb..678ba11 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -10,8 +10,8 @@ OCBYTE                = @OCAMLC@ -thread
 OCOPT          = @OCAMLOPT@ -thread
 FINDLIB = @OCAMLFIND@
 
-FLAGS          = -I .. 
-LFLAGS         = -I .. -ccopt -L..
+FLAGS          = -g -I ..
+LFLAGS         = -g -I .. -ccopt -L..
 
 OCURLLIB       = curl.cma unix.cma threads.cma
 OCURLOPTLIB    = curl.cmxa unix.cmxa threads.cmxa

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-ocaml-maint/packages/ocurl.git

_______________________________________________
Pkg-ocaml-maint-commits mailing list
Pkg-ocaml-maint-commits@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-ocaml-maint-commits

Reply via email to