Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37903313
en ru br
Репозитории ALT
S:1.8.2-alt4
D:1.3.5-alt2.1
5.1: 1.3.9-alt0.M51.1
4.1: 1.3.6-alt1.M41.1
4.0: 1.3.5-alt3.M40.1
3.0: 1.3.2-alt3
www.altlinux.org/Changes

Группа :: Сети/Мгновенные сообщения
Пакет: licq

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: licq-1.2.7-remove-pidfile.patch
Скачать


--- licq-1.2.7/src/licq.cpp~	2004-07-09 17:57:49 +0400
+++ licq-1.2.7/src/licq.cpp	2004-07-12 16:58:26 +0400
@@ -275,6 +275,8 @@ bool CLicq::Init(int argc, char **argv)
   sprintf(LIB_DIR, "%s/%s", INSTALL_PREFIX, BASE_LIB_DIR);
 
   // Check pid
+  char proc_cmdline_path[MAX_FILENAME_LEN], proc_line[256];
+  bool proc_failed = false;
   char szConf[MAX_FILENAME_LEN], szKey[32];
   snprintf(szConf, MAX_FILENAME_LEN, "%s/licq.pid", BASE_DIR);
   szConf[MAX_FILENAME_LEN - 1] = '\0';
@@ -290,10 +292,34 @@ bool CLicq::Init(int argc, char **argv)
       }
       else
       {
+        sprintf(proc_cmdline_path, "/proc/%d/cmdline", pid);
+        if( access(proc_cmdline_path, R_OK) == 0 )
+	{
+	    FILE *proc_file = fopen(proc_cmdline_path, "r");
+	    if (proc_file != NULL)
+	    {
+		fgets(proc_line, 255, proc_file);
+		if( strstr(proc_line, "licq") == NULL )
+		{
+    		    gLog.Warn("%sLicq: Ignoring stale lockfile (pid %d)\n", L_WARNxSTR, pid);
+		}
+		else
+		    proc_failed = true;
+		fclose(proc_file);
+	    }
+	    else
+	        proc_failed = true;
+	}
+	else
+	    proc_failed = true;
+	
+	if(proc_failed)
+	{
         gLog.Error("%sLicq: Already running at pid %d.\n"
                    "%s      Kill process or remove %s.\n",
                    L_ERRORxSTR, pid, L_BLANKxSTR, szConf);
         return false;
+	}
       }
     }
     fclose(fs);
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin