]> matita.cs.unibo.it Git - helm.git/commitdiff
fixed a finalization issue for connections closed twice
authorStefano Zacchiroli <zack@upsilon.cc>
Wed, 14 Sep 2005 16:06:14 +0000 (16:06 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Wed, 14 Sep 2005 16:06:14 +0000 (16:06 +0000)
thanks to Erik Stroke for the patch

helm/DEVEL/ocaml-http/debian/changelog
helm/DEVEL/ocaml-http/http_daemon.ml

index 80e1e425959a2862b1c9f492d1cb57c9e1261288..c7f6e581df41353a1c09f31b8f5a7c5bfa3b3afa 100644 (file)
@@ -1,3 +1,11 @@
+ocaml-http (0.1.2-1) unstable; urgency=low
+
+  * avoid exceptions for closing connection twice during finaliztion of
+    connection objects (thanks to Eric Strokes <eric.stokes@csun.edu>
+    for the patch)
+
+ -- Stefano Zacchiroli <zack@debian.org>  Wed, 14 Sep 2005 18:03:40 +0200
+
 ocaml-http (0.1.1-1) unstable; urgency=low
 
   * added ?default parameter to "param" method
index 60f186cd43c509309c2e3c638b62e5a638f69e4e..629d1286cfd7ea97be793e28bb01b8b891591455 100644 (file)
@@ -26,6 +26,8 @@ open Http_types
 open Http_constants
 open Http_parser
 
+exception Http_daemon_failure of string
+
   (** send raw data on outchan, flushing it afterwards *)
 let send_raw ~data outchan =
   output_string outchan data;
@@ -408,13 +410,13 @@ module Trivial =
     let main spec = main { spec with callback = trivial_callback }
   end
 
-  (* @param inchan input channel connected to client
+  (** @param inchan input channel connected to client
      @param outchan output channel connected to client
      @param sockaddr client socket address *)
 class connection inchan outchan sockaddr =
   (* ASSUMPTION: inchan and outchan are channels built on top of the same
   Unix.file_descr thus closing one of them will close also the other *)
-  let close' o = o#close in
+  let close' o = try o#close with Http_daemon_failure _ -> () in
   object (self)
 
     initializer Gc.finalise close' self
@@ -423,7 +425,8 @@ class connection inchan outchan sockaddr =
 
     method private assertNotClosed =
       if closed then
-        failwith "Http_daemon.connection: connection is closed"
+        raise (Http_daemon_failure
+          "Http_daemon.connection: connection is closed")
 
     method getRequest =
       self#assertNotClosed;