Hi, there,
In my code, I call g_mime_init() at the start of the process, and then spawn multiple threads to do the parsing with code like this
fd = open(...)
gm_stream = g_mime_stream_fs_new(fd);
gm_parser = g_mime_parser_new_with_stream(gm_stream);
g_object_unref(gm_stream);
gm_msg = g_mime_parser_construct_message(gm_parser);
g_object_unref(gm_parser);
Once in a while I got
(process:2547): GLib-GObject-WARNING **: cannot register existing type `GMimeFilterBasic'
I realized that there is a race condition in g_mime_stream_fs_get_type() which is called from g_mime_stream_fs_new(). If both threads got there at the same time and both got type 0, we would get the above warning. I believe this part of the code is the same in 2.4 through current 2.6.
I thought g_mime_init() should initialize this type by calling g_mime_stream_fs_get_type() as it does for some other types, and I wonder what is the reason not to include some of the types and what should be the recommended calling sequence here.
Thanks in advance.
- Junping