+struct vlc_thread_boot
+{
+ void * (*entry) (void *);
+ vlc_object_t *object;
+};
+
+#if defined (LIBVLC_USE_PTHREAD)
+# define THREAD_RTYPE void *
+# define THREAD_RVAL NULL
+#elif defined (WIN32)
+# define THREAD_RTYPE __stdcall unsigned
+# define THREAD_RVAL 0
+#endif
+
+static THREAD_RTYPE thread_entry (void *data)
+{
+ vlc_object_t *obj = ((struct vlc_thread_boot *)data)->object;
+ void *(*func) (void *) = ((struct vlc_thread_boot *)data)->entry;
+
+ free (data);
+ vlc_threadvar_set (&thread_object_key, obj);
+ msg_Dbg (obj, "thread started");
+ func (obj);
+ msg_Dbg (obj, "thread ended");
+ return THREAD_RVAL;
+}
+