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