Version française
Home     About     Download     Resources     Contact us    
Browse thread
exception not registered.Abandon
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Florent Monnier <monnier.florent@g...>
Subject: Re: [Caml-list] exception not registered.Abandon
Le samedi 13 mars 2010 19:55:37, vous avez écrit :
> On Sat, Mar 13, 2010 at 07:36:16PM +0100, Florent Monnier wrote:
> > > > I have compiled a program using the native compiler, then when I run
> > > > the executable I get this error message:
> > > >
> > > > exception not registered.Abandon
> > > >
> > > > Searching Google I don't find anything about this error message.
> > > > How should I interpret it?
> > >
> > > Is the program linked to C code (apart from stdlib, I mean)?
> >
> > Yes it is.
> > It's linked with OpenGL (only the GL lib, no GLU or anything esle) and
> > SDL (through ocaml-sdl)
> >
> > It's a program that I try to switch the windowing part from Glut to SDL.
> > With Glut it works alright.
> >
> > Also I've just seen that running in the interpreted mode instead of
> > native code the program does run without any problem.
> >
> > Do these additional informations give you any clue?
> 
> As Adrian said, it's from ocaml-SDL.  It's from one of several
> functions which look like this:
> 
>  static void
>  sdlloader_raise_exception (char *msg)
>  {
>    static value *loader_exn = NULL;
>    if(! loader_exn){
>      loader_exn = caml_named_value("SDLloader_exception");
>      if(! loader_exn) {
>        fprintf(stderr, "exception not registered.");
>        abort();
>      }
>    }
>    raise_with_string(*loader_exn, msg);
>  }
> 
> Essentially you have to register OCaml exceptions before you can call
> them from C, so it sounds like you're not calling some sort of SDL
> "init" function (or calling it too late in your program).  Or possibly
> there is a bug in the ocaml-SDL bindings.

In the source of the sdlvideo.ml module there is:

exception Video_exn of string
let _ =
  Callback.register_exception "SDLvideo2_exception" (Video_exn "")

it seems for some reason that this code is not executed, because if I add at 
the beginning of my program (not in sdl source):

let () =
  (* notice the exception is prefixed with the name of the sdl module *)
  Callback.register_exception "SDLvideo2_exception" (Sdlvideo.Video_exn "");
;;

then I get the correct exception.
I don't understand what the bug is.