add test case for CURLOPT_MIMEPOST + duphandle (segfaults)
[ocurl.git] / examples / test_memory_leaks.ml
blobd9720035edd4029a5d21971c9b20ad6bb0dbe481
1 open Curl
3 let test1 size =
4 let h = init () in
5 let s1 = String.make size 'd' in
6 set_private h s1;
7 let s2 = String.make size 'c' in
8 set_httppost h [CURLFORM_CONTENT ("part", s2, DEFAULT)];
9 assert (get_private h = s1);
10 cleanup h
12 let test2 size =
13 let h = init () in
14 let s = String.make size 'a' in
15 set_mimepost h [{encoding=CURLMIME_BINARY;headers=[];subparts=[];data=CURLMIME_DATA s}];
16 let g = duphandle h in
17 cleanup h;
18 cleanup g
20 let rss () =
21 let path = Printf.sprintf "/proc/%d/statm" (Unix.getpid ()) in
22 try
23 let ch = open_in path in
24 let n = Scanf.fscanf ch "%_d %d" (fun x -> 4*1024*x) in close_in_noerr ch; n
25 with exn -> Printf.eprintf "Error opening %s (%s), ignoring\n%!" path (Printexc.to_string exn); 0
27 let check test count leak_size =
28 let rss1 = rss () in
29 for i = 0 to count do
30 test leak_size;
31 Gc.compact ();
32 done;
33 let rss2 = rss () in
34 Printf.printf "RSS %d -> %d %s\n%!" rss1 rss2 (if rss2 - rss1 < count * leak_size / 10 then "OK" else "LEAKING")
36 let () =
37 let mb = 1024 * 1024 in
38 check test1 200 mb;
39 check test2 100 mb;