- 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);