let progress ws (position, total) =
if position = 0L && total = 1L then
ws.progress_bar#pulse ()
- else
- ws.progress_bar#set_fraction
- (Int64.to_float position /. Int64.to_float total)
+ else (
+ let frac = Int64.to_float position /. Int64.to_float total in
+ if frac < 0. || frac > 1. then
+ eprintf "warning: progress bar out of range: %Ld / %Ld (%g)\n"
+ position total frac;
+ let frac = if frac < 0. then 0. else if frac > 1. then 1. else frac in
+ ws.progress_bar#set_fraction frac
+ )
(* This is called in the main thread whenever a command fails in the
* slave thread. The command queue has been cleared before this is