]> git.sesse.net Git - vlc/blobdiff - bin/vlc.c
Win32: more dialogs when submitting the bug reports
[vlc] / bin / vlc.c
index 2094cdc75498faeb1dad7591a6a5fa17f46c21ee..75a97a1379bcfed64342e621cbb7a1cca9df4576 100644 (file)
--- a/bin/vlc.c
+++ b/bin/vlc.c
@@ -91,20 +91,22 @@ int main( int i_argc, const char *ppsz_argv[] )
     /* Restore SIGCHLD in case our parent process ignores it. */
     signal (SIGCHLD, SIG_DFL);
 
-#ifdef HAVE_SETENV
-# ifndef NDEBUG
+#ifndef NDEBUG
     /* Activate malloc checking routines to detect heap corruptions. */
     setenv ("MALLOC_CHECK_", "2", 1);
 
     /* Disable the ugly Gnome crash dialog so that we properly segfault */
     setenv ("GNOME_DISABLE_CRASH_DIALOG", "1", 1);
-# endif
+#endif
+
+#ifdef TOP_BUILDDIR
+    setenv ("VLC_PLUGIN_PATH", TOP_BUILDDIR"/modules", 1);
+#endif
 
     /* Clear the X.Org startup notification ID. Otherwise the UI might try to
      * change the environment while the process is multi-threaded. That could
      * crash. Screw you X.Org. Next time write a thread-safe specification. */
     unsetenv ("DESKTOP_STARTUP_ID");
-#endif
 
 #ifndef ALLOW_RUN_AS_ROOT
     if (geteuid () == 0)
@@ -174,14 +176,11 @@ int main( int i_argc, const char *ppsz_argv[] )
     pthread_sigmask (SIG_SETMASK, &set, NULL);
 
     /* Note that FromLocale() can be used before libvlc is initialized */
-    const char *argv[i_argc + 4];
+    const char *argv[i_argc + 3];
     int argc = 0;
 
     argv[argc++] = "--no-ignore-config";
     argv[argc++] = "--media-library";
-#ifdef TOP_BUILDDIR
-    argv[argc++] = FromLocale ("--plugin-path="TOP_BUILDDIR"/modules");
-#endif
 #ifdef TOP_SRCDIR
     argv[argc++] = FromLocale ("--data-path="TOP_SRCDIR"/share");
 #endif
@@ -221,14 +220,19 @@ int main( int i_argc, const char *ppsz_argv[] )
     pthread_t self = pthread_self ();
     libvlc_set_exit_handler (vlc, vlc_kill, &self);
 
-    if (signal_ignored (SIGHUP)) /* <- needed to handle nohup properly */
+    /* Qt4 insists on catching SIGCHLD via signal handler. To work around that,
+     * unblock it after all our child threads are created. */
+    sigdelset (&set, SIGCHLD);
+    pthread_sigmask (SIG_SETMASK, &set, NULL);
+
+    /* Do not dequeue SIGHUP if it is ignored (nohup) */
+    if (signal_ignored (SIGHUP))
         sigdelset (&set, SIGHUP);
+    /* Ignore SIGPIPE */
     sigdelset (&set, SIGPIPE);
 
     int signum;
-    do
-        sigwait (&set, &signum);
-    while (signum == SIGCHLD);
+    sigwait (&set, &signum);
 
     /* Restore default signal behaviour after 3 seconds */
     sigemptyset (&set);