From 91342bd0dbbbddf67360292a9a1637b93a756b1e Mon Sep 17 00:00:00 2001 From: ygrek Date: Sat, 5 May 2018 21:17:36 -0700 Subject: [PATCH] add test case for CURLOPT_MIMEPOST + duphandle (segfaults) --- examples/test_memory_leaks.ml | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/examples/test_memory_leaks.ml b/examples/test_memory_leaks.ml index b145be4..d972003 100644 --- a/examples/test_memory_leaks.ml +++ b/examples/test_memory_leaks.ml @@ -1,17 +1,22 @@ open Curl -let count1 = 200 -let leak1 = 1024 * 1024 - -let test1 () = +let test1 size = let h = init () in - let s1 = String.make leak1 'd' in + let s1 = String.make size 'd' in set_private h s1; - let s2 = String.make leak1 'c' in + let s2 = String.make size 'c' in set_httppost h [CURLFORM_CONTENT ("part", s2, DEFAULT)]; assert (get_private h = s1); cleanup h +let test2 size = + let h = init () in + let s = String.make size 'a' in + set_mimepost h [{encoding=CURLMIME_BINARY;headers=[];subparts=[];data=CURLMIME_DATA s}]; + let g = duphandle h in + cleanup h; + cleanup g + let rss () = let path = Printf.sprintf "/proc/%d/statm" (Unix.getpid ()) in try @@ -19,11 +24,17 @@ let rss () = let n = Scanf.fscanf ch "%_d %d" (fun x -> 4*1024*x) in close_in_noerr ch; n with exn -> Printf.eprintf "Error opening %s (%s), ignoring\n%!" path (Printexc.to_string exn); 0 -let () = +let check test count leak_size = let rss1 = rss () in - for i = 0 to count1 do - test1 (); + for i = 0 to count do + test leak_size; Gc.compact (); done; let rss2 = rss () in - Printf.printf "RSS %d -> %d %s\n%!" rss1 rss2 (if rss2 - rss1 < count1 * leak1 / 10 then "OK" else "LEAKING") + Printf.printf "RSS %d -> %d %s\n%!" rss1 rss2 (if rss2 - rss1 < count * leak_size / 10 then "OK" else "LEAKING") + +let () = + let mb = 1024 * 1024 in + check test1 200 mb; + check test2 100 mb; + () -- 2.11.4.GIT