From: Jason T. <ta...@sa...> - 2005-11-22 17:55:21
|
Hi, I'm doing some refactoring of my OSD/passthrough driver based on suggestions (either by Michael or Miguel) some time ago. The way I was originally setting up the driver (which is currently called 'kaa' but will be renamed eventually) was: kaa_visual_t vis; vis.passthrough =3D _x_load_video_output_plugin(xine, "xv",=20 XINE_VISUAL_TYPE_X11, (void *)&x11_vis); ... xine_open_video_driver(xine, "kaa", XINE_VISUAL_TYPE_NONE, (void *)= &vis); =20 Now, it was suggested that the kaa driver itself call _x_load_video_output_plugin(), so the process becomes: kaa_visual_t vis; vis.passthrough_driver =3D "xv"; vis.passthrough_visual =3D (void *)&x11_vis; ... xine_open_video_driver(xine, "kaa", XINE_VISUAL_TYPE_NONE, (void *)= &vis); =20 I agree this is the cleaner way to go, however if open_plugin for the kaa driver calls _x_load_video_output_plugin(), this results in a deadlock, because this function doesn't allow recursion. (The function first acquires a lock on catalog->lock, and reentry will of course deadlock.) Suggestions? Cheers, Jason. |