From 7438ca37b6e688637a87cbdc87490e70a61e1829 Mon Sep 17 00:00:00 2001
From: fengtao40 <fengtao40@huawei.com>
Date: Sat, 13 Jun 2020 16:54:09 +0800
Subject: [PATCH] unlock-pidfile-if-current-proccess-is-NOT-dnf

---
 dnf/lock.py | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/dnf/lock.py b/dnf/lock.py
index 13d8c27..589aa0a 100644
--- a/dnf/lock.py
+++ b/dnf/lock.py
@@ -32,6 +32,7 @@ import logging
 import os
 import threading
 import time
+import re
 
 logger = logging.getLogger("dnf")
 
@@ -106,6 +107,19 @@ class ProcessLock(object):
             if old_pid == pid:
                 # already locked by this process
                 return pid
+                
+            try:
+                with open('/proc/%d/status' % old_pid) as f:
+                    for line in f:
+                        if not re.match(r'Name:(.*)(dnf|yum)$', line, re.I):
+                            os.write(fd, str(pid).encode('utf-8'))
+                            return pid
+            except Exception as e:
+                msg = _('Malformed lock file found: %s.\n'
+                        'But pid in lock file is invalid '
+                        'Ensure no other dnf/yum process is running and '
+                        'remove the lock file manually.') % (self.target)
+                raise LockError(msg)
 
             if not os.access('/proc/%d/stat' % old_pid, os.F_OK):
                 # locked by a dead process, write our pid
-- 
2.18.2

