Thread: clean commissioning proxy thread (#43372)

diff --git a/src/controller/ThreadMeshcopCommissionProxy.cpp b/src/controller/ThreadMeshcopCommissionProxy.cpp
index fe89154..202b8da 100644
--- a/src/controller/ThreadMeshcopCommissionProxy.cpp
+++ b/src/controller/ThreadMeshcopCommissionProxy.cpp
@@ -76,9 +76,14 @@
 
 ThreadMeshcopCommissionProxy::~ThreadMeshcopCommissionProxy()
 {
+    std::lock_guard<std::recursive_mutex> lock(mMutex);
     if (mProxyFd != -1)
     {
-        close(mProxyFd);
+        if (shutdown(mProxyFd, SHUT_RDWR) == 0 || errno != EBADF)
+        {
+            close(mProxyFd);
+        }
+
         mProxyFd = -1;
     }