]> matita.cs.unibo.it Git - helm.git/commitdiff
when auto_close is set, use flush + shutdown instead of close_out, work around an...
authorStefano Zacchiroli <zack@upsilon.cc>
Mon, 3 Jul 2006 16:32:26 +0000 (16:32 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Mon, 3 Jul 2006 16:32:26 +0000 (16:32 +0000)
DEVEL/ocaml-http/debian/rules
DEVEL/ocaml-http/http_daemon.ml

index bde0727440b5c0279bbaa2a28d9a4787cf55cf84..b8493ead0adf20924472b18f33f25283e007b5c9 100755 (executable)
@@ -6,12 +6,16 @@ PKGNAME = libhttp-ocaml-dev
 
 OCAMLABI := $(shell ocamlc -version)
 OCAMLLIBDIR := $(shell ocamlc -where)
-OFILES := $(patsubst %.in,%,$(shell ls debian/*.in))
+OFILES_ALL := $(patsubst %.in,%,$(shell ls debian/*.in))
+OFILES := $(filter-out debian/rules, $(OFILES_ALL))
 HAVE_OCAMLOPT := $(shell test -x /usr/bin/ocamlopt && echo "yes")
 DEB_DH_GENCONTROL_ARGS = -- -VF:OCamlABI="$(OCAMLABI)"
 DEB_MAKE_INSTALL_TARGET = install DESTDIR=$(CURDIR)/debian/$(PKGNAME)$(OCAMLLIBDIR)
 
 ocamlinit:
+       for f in $(OFILES_ALL); do sed -e 's/@OCamlABI@/$(OCAMLABI)/g' $$f.in > $$f; done
+
+makebuilddir/$(PKGNAME)::
        for f in $(OFILES); do sed -e 's/@OCamlABI@/$(OCAMLABI)/g' $$f.in > $$f; done
 
 ifeq ($(HAVE_OCAMLOPT),yes)
index 1b922ea16532947f902a7a00a7f44e8057efa3b8..992f3b99a8dc9a8bcf2ea31c19b2c05cfbd30f5f 100644 (file)
@@ -303,7 +303,15 @@ let invoke_callback req spec outchan =
   let callback req outchan =
     if spec.auto_close then
       Http_misc.finally
-        (fun () -> try close_out outchan with Sys_error _ -> ())
+        (fun () ->
+          (* XXX the pair flush + shutdown is a temporary solution since double
+           * close on a socket make ocaml 3.09.2 segfault (see
+           * http://caml.inria.fr/mantis/view.php?id=4059). The right thing to
+           * do is probably invoke try_close outchan here *)
+          flush outchan;
+          try
+            Unix.shutdown (Unix.descr_of_out_channel outchan) Unix.SHUTDOWN_ALL
+          with Unix.Unix_error(_, "shutdown", "") -> ())
         (fun () -> spec.callback req outchan) ()
     else
       spec.callback req outchan in