Phil Pennock:

> Is it known that when you do "sks dump <N> <dir>", you end up with up to
> 10 stack frames per N, plus the calls into the DB layer, etc?
[...]
> I was suspecting db problems, and it's not.  Looks as though something
> was expecting tail recursion optimisation but not getting it.  I really
> don't know enough about programming in functional languages to look into
> this properly.  I don't even know if things like shuffling exception
> handling around would let the tail recursion optimisation kick in and
> where things like integrity of backup dumps are concerned, I play around
> less.

I highly suspect that the inside of a try block is not a tail position
and that "shuffling exception handling around" is the right thing to do
here.  Try this.

Kim Minh.
diff -r 181a19755969 sksdump.ml
--- a/sksdump.ml	Sat Mar 21 18:31:36 2009 +0000
+++ b/sksdump.ml	Sun Mar 22 05:58:10 2009 +0000
@@ -46,19 +46,22 @@
       match SStream.next stream with
 	| None -> ()
 	| Some (hash,string) ->
+	    let remain =
 	    try
 	      let skey = Keydb.skey_of_string string in
 	      if should_dump skey then
 		let keystring = Keydb.keystring_of_skey skey in
 		output_string cout keystring;
-		write_to_file (size - 1) stream cout
+		size - 1
 	      else
-		write_to_file size stream cout
+		size
 	    with
 		e -> 
 		  eplerror 1 e "Failed attempt to extract key %s" 
 		  (KeyHash.hexify hash);
-		  write_to_file size stream cout
+		  size
+	    in
+	    write_to_file remain stream cout
 
 
   let write_to_fname size stream fname = 
_______________________________________________
Sks-devel mailing list
Sks-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/sks-devel

Reply via email to