From faf073a28fd692b5517325169b3865f58a895942 Mon Sep 17 00:00:00 2001 From: "Glenn Y. Rolland" <glenux@gmail.com> Date: Sun, 4 Sep 2011 05:06:23 +0200 Subject: [PATCH] Single instance lock is now functional. --- bin/qasim-gui.rb | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/bin/qasim-gui.rb b/bin/qasim-gui.rb index dd5219b..22f6142 100755 --- a/bin/qasim-gui.rb +++ b/bin/qasim-gui.rb @@ -144,13 +144,13 @@ module Qasim @context_menu = Qt::Menu.new act_pref = Qt::Action.new _('&Preferences'), @context_menu - act_pref.setIcon( Qt::Icon::fromTheme("configure") ) + act_pref.setIcon( Qt::Icon::fromTheme("configure") ) rescue nil act_pref.setIconVisibleInMenu true act_pref.setEnabled false @context_menu.addAction act_pref; act_about = Qt::Action.new '&About', @context_menu - act_about.setIcon( Qt::Icon::fromTheme("help-about") ) + act_about.setIcon( Qt::Icon::fromTheme("help-about") ) rescue nil act_about.setIconVisibleInMenu true act_about.setEnabled false @context_menu.addAction act_about; @@ -158,7 +158,7 @@ module Qasim @context_menu.addSeparator act_quit = Qt::Action.new _('Quit'), @context_menu - act_quit.setIcon( Qt::Icon::fromTheme("application-exit") ) + act_quit.setIcon( Qt::Icon::fromTheme("application-exit") ) rescue nil act_quit.setIconVisibleInMenu true act_quit.connect(SIGNAL(:triggered)) { @app.quit } @context_menu.addAction act_quit @@ -213,24 +213,22 @@ module Qasim # create lock have_lock = true - lockfname = APP_CONFIG_DIR, "lock" - File.open lockfname, "w" do - unless f.flock File::LOCK_EX | File::LOCK_NB - warn "Another instance of %s is already running." % APP_NAME - exit 1 - end - f.flock File::LOCK_EX - end - - fd = IO::sysopen('/tmp/tempfile', + FileUtils.mkdir_p APP_CONFIG_DIR unless File.exist? APP_CONFIG_DIR + lockfname = File.join APP_CONFIG_DIR, "lock" + fd = IO::sysopen( lockfname, Fcntl::O_WRONLY | Fcntl::O_EXCL | Fcntl::O_CREAT) f = IO.open(fd) - f.syswrite("TEMP DATA") + f.syswrite( "Process.pid\n" ) f.close - masterpid = fh.gets @app.exec + rescue Errno::EEXIST => e + warn "error: Another instance of %s is already running." + exit 1 ensure - fh.close + masterpid = File.read(lockfname).strip + if masterpid == Process.pid then + FileUtils.rm lockfname + end end