]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/uwobo/src/ocaml/uwobo_logger.ml
- bugfix (or hack, as you wish :-) for recursive invocations problem:
[helm.git] / helm / uwobo / src / ocaml / uwobo_logger.ml
index b7e4239a6c03df29b83160e38f2b7dfd2fa1de55..0a27ee2643bd036afd7e55235d0784f0092db783 100644 (file)
@@ -1,4 +1,29 @@
 
+(* Copyright (C) 2002, HELM Team.
+ * 
+ * This file is part of HELM, an Hypertextual, Electronic
+ * Library of Mathematics, developed at the Computer Science
+ * Department, University of Bologna, Italy.
+ * 
+ * HELM is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * HELM is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HELM; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA  02111-1307, USA.
+ * 
+ * For details, see the HELM World-Wide-Web page,
+ * http://cs.unibo.it/helm/.
+ *)
+
 open Printf;;
 
 type priority = [ 
@@ -26,18 +51,23 @@ let string_of_priority = function
   | `Debug    -> "DEBUG"
 
 class sysLogger ?(level: priority = `Notice) () =
-  object
+  object (self)
+    inherit Uwobo_common.threadSafe
     initializer
       print_endline (sprintf "Logger started with level %s" (string_of_priority level))
     val level_no = int_of_priority level
     val mutable enabled = false
-    method enable = enabled <- true
-    method disable = enabled <- false
+    method enable = self#doCritical (lazy (enabled <- true))
+    method disable = self#doCritical (lazy (enabled <- false))
     method log (prio: priority) msg =
-      if enabled && (int_of_priority prio <= level_no) then
-        prerr_endline (sprintf ("%s: %s") (string_of_priority prio) msg)
+      self#doCritical (lazy (
+        if enabled && (int_of_priority prio <= level_no) then
+          prerr_endline (sprintf ("%s: %s") (string_of_priority prio) msg)
+      ))
   end
 
+  (** non thread safe, a processingLogger is usually instantied locally for each
+  thread *)
 class processingLogger =
   let html_escape s = (* TODO too naive, use Nethtml.encode instead *)
     Pcre.replace ~pat:"<" ~templ:"&lt;"