- ack
On Wednesday 26 of September 2012 13:30:13 Jiri Moskovcak wrote:
---
src/daemon/abrtd.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/src/daemon/abrtd.c b/src/daemon/abrtd.c
index 3bf705c..429737c 100644
--- a/src/daemon/abrtd.c
+++ b/src/daemon/abrtd.c
@@ -704,6 +704,28 @@ static void dumpsocket_shutdown()
}
}
+static pid_t get_locking_pid()
+{
+ FILE *pid_file = fopen(VAR_RUN_PIDFILE, "r");
+ pid_t retval = 0;
+
+ if (!pid_file)
+ {
+ perror_msg("Can't open %s", VAR_RUN_PIDFILE);
+ return retval;
+ }
+
+ char line[128]; //should be enough to store pid
+
+ if (fgets(line, sizeof(line), pid_file) != NULL)
+ {
+ retval = strtol(line, (char **)NULL, 10);
+ }
+
+ fclose(pid_file);
+ return retval;
+}
+
static int create_pidfile()
{
/* Note:
@@ -718,6 +740,14 @@ static int create_pidfile()
if (lockf(fd, F_TLOCK, 0) < 0)
{
perror_msg("Can't lock file '%s'", VAR_RUN_PIDFILE);
+ /* should help with problems like rhbz#859724 */
+ pid_t locking_pid = get_locking_pid();
+ char *cmdline = get_cmdline(locking_pid);
- you create cmdline event if it is not used :)
+ if (locking_pid > 0 && cmdline)
+ error_msg("Process: '%s (%u)' is holding the lock",
cmdline, locking_pid); +
+ free(cmdline);
+
return -1;
}
close_on_exec_on(fd);