OSDN Git Service

LinGui: create a queue lock file to prevent simultaneous access to the queue
authorjstebbins <jstebbins@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sun, 4 Oct 2009 18:00:57 +0000 (18:00 +0000)
committerjstebbins <jstebbins@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sun, 4 Oct 2009 18:00:57 +0000 (18:00 +0000)
from 2 running instances of ghb

git-svn-id: svn://localhost/HandBrake/trunk@2869 b64f7644-9d1e-0410-96f1-a4d463321fa5

gtk/src/main.c
gtk/src/presets.c
gtk/src/presets.h
gtk/src/preview.c

index efc2fbc..2c73207 100644 (file)
@@ -697,6 +697,21 @@ main (int argc, char *argv[])
        ghb_hal_init();
 #endif
 
+       if (!ghb_lock_file("queue_lock"))
+       {
+       const gchar *markup =
+               N_("<b><big>Another instance of HandBrake is already running.</big></b>\n"
+               "\n"
+               "Only one instance of HandBrake may run.\n");
+        GtkWidget *dialog = gtk_message_dialog_new_with_markup(NULL,
+            GTK_DIALOG_MODAL,
+            GTK_MESSAGE_ERROR,
+            GTK_BUTTONS_CLOSE,
+            _(markup));
+        gtk_dialog_run(GTK_DIALOG(dialog));
+        gtk_widget_destroy(dialog);
+        exit(EXIT_FAILURE);
+       }
        ud = g_malloc0(sizeof(signal_user_data_t));
        ud->debug = ghb_debug;
        g_log_set_handler (NULL, G_LOG_LEVEL_DEBUG, debug_log_handler, ud);
index 7d31519..75354b1 100644 (file)
  * any later version.
  * 
  */
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
 #include <glib.h>
 #include <glib-object.h>
 #include <glib/gstdio.h>
@@ -1112,6 +1116,24 @@ load_plist(const gchar *name)
        return plist;
 }
 
+gboolean
+ghb_lock_file(const gchar *name)
+{
+       gchar *config, *path;
+       int fd, lock = 0;
+
+       config = ghb_get_user_config_dir(NULL);
+       path = g_strdup_printf ("%s/%s", config, name);
+       fd = open(path, O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
+       if (fd >= 0)
+               lock = lockf(fd, F_TLOCK, 0);
+       if (lock)
+               close(fd);
+       g_free(config);
+       g_free(path);
+       return !lock;
+}
+
 static void
 remove_plist(const gchar *name)
 {
index 8c05f19..65b4e8c 100644 (file)
@@ -40,5 +40,6 @@ gchar* ghb_preset_path_string(const GValue *path);
 gboolean ghb_preset_is_custom(void);
 void ghb_prefs_store(void);
 void ghb_pref_set(GValue *settings, const gchar *key);
+gboolean ghb_lock_file(const gchar *name);
 
 #endif // _GHB_PRESETS_H_
index 577cbd5..9fd92bf 100644 (file)
@@ -946,8 +946,6 @@ picture_settings_alt2_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
 {
        GtkWidget *toggle;
        gboolean active;
-       gint signal_id;
-       gint handler_id = 0;
        GtkWidget *window;
 
        g_debug("picture_settings_alt2_clicked_cb()");