diff --git a/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4.c b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4.c
index 33755d3..15b16b9 100644
--- a/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4.c
+++ b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4.c
@@ -1,9 +1,4 @@
 /*
- * mutex4.c
- *
- *
- * --------------------------------------------------------------------------
- *
  *      Pthreads-win32 - POSIX Threads Library for Win32
  *      Copyright(C) 1998 John E. Bossom
  *      Copyright(C) 1999,2005 Pthreads-win32 contributors
@@ -31,54 +26,39 @@
  *      License along with this library in the file COPYING.LIB;
  *      if not, write to the Free Software Foundation, Inc.,
  *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * --------------------------------------------------------------------------
- *
- * Thread A locks mutex - thread B tries to unlock.
- *
- * Depends on API functions:
- *  pthread_mutex_lock()
- *  pthread_mutex_trylock()
- *  pthread_mutex_unlock()
  */
 
 #include "test.h"
 
-static int wasHere = 0;
+/**
+ * Test Summary:
+ *
+ * Main thread M creates default-type mutex L and locks it.
+ *
+ * Thread A attempts to unlock L; the call to `pthread_mutex_unlock` must
+ * succeed (see comment below).
+ *
+ * Thread M unlocks and destroys L.
+ */
 
-static pthread_mutex_t mutex1;
-
-void *unlocker(void *arg)
+static void *ThreadA(void *arg)
 {
-  int expectedResult = (int) (size_t) arg;
-  int h;
-
-  wasHere++;
-  h = pthread_mutex_unlock(&mutex1);
-  printf("*** %d==%d\n\n", h, expectedResult);
-  fflush(stdout);
-  assert(h == expectedResult);
-  wasHere++;
-
-  return NULL;
+  pthread_mutex_t *mutex = arg;
+  assert(pthread_mutex_unlock(mutex) == 0);
+  return arg;
 }
 
 int main(void)
 {
-  pthread_t t;
-  pthread_mutexattr_t ma;
+  pthread_mutex_t mutex;
+  pthread_t thread;
+  void *result;
 
-  assert(pthread_mutexattr_init(&ma) == 0);
-
-  wasHere = 0;
-  assert(pthread_mutexattr_settype(&ma, PTHREAD_MUTEX_DEFAULT) == 0);
-  assert(pthread_mutex_init(&mutex1, &ma) == 0);
-  assert(pthread_mutex_lock(&mutex1) == 0);
-  /*
-   * NORMAL (fast) mutexes don't check ownership.
-   */
-  assert(pthread_create(&t, NULL, unlocker, (void *) 0) == 0);
-  assert(pthread_join(t, NULL) == 0);
+  assert(pthread_mutex_init(&mutex, NULL) == 0);
+  assert(pthread_mutex_lock(&mutex) == 0);
+  assert(pthread_create(&thread, NULL, ThreadA, &mutex) == 0);
+  assert(pthread_join(thread, &result) == 0);
+  assert(result == &mutex);
   /**
    * POSIX states that calling `pthread_mutex_unlock` on NORMAL mutex that is
    * not owned by the calling thread is undefined behavior.
@@ -86,8 +66,8 @@
    * Our implementation for NORMAL mutexes does not check ownership at all,
    * so call to `pthread_mutex_unlock` on a valid NORMAL mutex always succeeds.
    */
-  assert(pthread_mutex_unlock(&mutex1) == 0);
-  assert(wasHere == 2);
+  assert(pthread_mutex_unlock(&mutex) == 0);
+  assert(pthread_mutex_destroy(&mutex) == 0);
 
   return 0;
 }
diff --git a/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4e.c b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4e.c
index cc04eca..e231bc6 100644
--- a/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4e.c
+++ b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4e.c
@@ -26,53 +26,46 @@
  *      License along with this library in the file COPYING.LIB;
  *      if not, write to the Free Software Foundation, Inc.,
  *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * --------------------------------------------------------------------------
- *
- * Thread A locks mutex - thread B tries to unlock.
- *
- * Depends on API functions:
- *  pthread_mutex_lock()
- *  pthread_mutex_trylock()
- *  pthread_mutex_unlock()
  */
 
 #include "test.h"
 
-static int wasHere = 0;
+/**
+ * Test Summary:
+ *
+ * Main thread M creates mutex L with type `PTHREAD_MUTEX_ERRORCHECK` and
+ * locks it.
+ *
+ * Thread A attempts to unlock L; since M owns L, call to `pthread_mutex_unlock`
+ * must fail with EPERM.
+ *
+ * Thread M unlocks and destroys L.
+ */
 
-static pthread_mutex_t mutex1;
-
-void *unlocker(void *arg)
+static void *ThreadA(void *arg)
 {
-  int expectedResult = (int) (size_t) arg;
-  int h;
-
-  wasHere++;
-  h = pthread_mutex_unlock(&mutex1);
-  printf("*** %d==%d\n\n", h, expectedResult);
-  fflush(stdout);
-  assert(h == expectedResult);
-  wasHere++;
-
-  return NULL;
+  pthread_mutex_t *mutex = arg;
+  assert(pthread_mutex_unlock(mutex) == EPERM);
+  return arg;
 }
 
 int main(void)
 {
-  pthread_t t;
-  pthread_mutexattr_t ma;
+  pthread_mutexattr_t mutexAttr;
+  pthread_mutex_t mutex;
+  pthread_t thread;
+  void *result;
 
-  assert(pthread_mutexattr_init(&ma) == 0);
-
-  wasHere = 0;
-  assert(pthread_mutexattr_settype(&ma, PTHREAD_MUTEX_ERRORCHECK) == 0);
-  assert(pthread_mutex_init(&mutex1, &ma) == 0);
-  assert(pthread_mutex_lock(&mutex1) == 0);
-  assert(pthread_create(&t, NULL, unlocker, (void *) EPERM) == 0);
-  assert(pthread_join(t, NULL) == 0);
-  assert(pthread_mutex_unlock(&mutex1) == 0);
-  assert(wasHere == 2);
+  assert(pthread_mutexattr_init(&mutexAttr) == 0);
+  assert(pthread_mutexattr_settype(&mutexAttr, PTHREAD_MUTEX_ERRORCHECK) == 0);
+  assert(pthread_mutex_init(&mutex, &mutexAttr) == 0);
+  assert(pthread_mutex_lock(&mutex) == 0);
+  assert(pthread_create(&thread, NULL, ThreadA, &mutex) == 0);
+  assert(pthread_join(thread, &result) == 0);
+  assert(result == &mutex);
+  assert(pthread_mutex_unlock(&mutex) == 0);
+  assert(pthread_mutex_destroy(&mutex) == 0);
+  assert(pthread_mutexattr_destroy(&mutexAttr) == 0);
 
   return 0;
 }
diff --git a/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4n.c b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4n.c
index f3933e1..60a9d4f 100644
--- a/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4n.c
+++ b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4n.c
@@ -26,54 +26,42 @@
  *      License along with this library in the file COPYING.LIB;
  *      if not, write to the Free Software Foundation, Inc.,
  *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * --------------------------------------------------------------------------
- *
- * Thread A locks mutex - thread B tries to unlock.
- *
- * Depends on API functions:
- *  pthread_mutex_lock()
- *  pthread_mutex_trylock()
- *  pthread_mutex_unlock()
  */
 
 #include "test.h"
 
-static int wasHere = 0;
+/**
+ * Test Summary:
+ *
+ * Main thread M creates mutex L with type `PTHREAD_MUTEX_NORMAL` and locks it.
+ *
+ * Thread A attempts to unlock L; the call to `pthread_mutex_unlock` must
+ * succeed (see comment below).
+ *
+ * Thread M unlocks and destroys L.
+ */
 
-static pthread_mutex_t mutex1;
-
-void *unlocker(void *arg)
+static void *ThreadA(void *arg)
 {
-  int expectedResult = (int) (size_t) arg;
-  int h;
-
-  wasHere++;
-  h = pthread_mutex_unlock(&mutex1);
-  printf("*** %d==%d\n\n", h, expectedResult);
-  fflush(stdout);
-  assert(h == expectedResult);
-  wasHere++;
-
-  return NULL;
+  pthread_mutex_t *mutex = arg;
+  assert(pthread_mutex_unlock(mutex) == 0);
+  return arg;
 }
 
 int main(void)
 {
-  pthread_t t;
-  pthread_mutexattr_t ma;
+  pthread_mutexattr_t mutexAttr;
+  pthread_mutex_t mutex;
+  pthread_t thread;
+  void *result;
 
-  assert(pthread_mutexattr_init(&ma) == 0);
-
-  wasHere = 0;
-  assert(pthread_mutexattr_settype(&ma, PTHREAD_MUTEX_NORMAL) == 0);
-  assert(pthread_mutex_init(&mutex1, &ma) == 0);
-  assert(pthread_mutex_lock(&mutex1) == 0);
-  /*
-   * NORMAL (fast) mutexes don't check ownership.
-   */
-  assert(pthread_create(&t, NULL, unlocker, (void *) 0) == 0);
-  assert(pthread_join(t, NULL) == 0);
+  assert(pthread_mutexattr_init(&mutexAttr) == 0);
+  assert(pthread_mutexattr_settype(&mutexAttr, PTHREAD_MUTEX_NORMAL) == 0);
+  assert(pthread_mutex_init(&mutex, &mutexAttr) == 0);
+  assert(pthread_mutex_lock(&mutex) == 0);
+  assert(pthread_create(&thread, NULL, ThreadA, &mutex) == 0);
+  assert(pthread_join(thread, &result) == 0);
+  assert(result == &mutex);
   /**
    * POSIX states that calling `pthread_mutex_unlock` on NORMAL mutex that is
    * not owned by the calling thread is undefined behavior.
@@ -81,8 +69,9 @@
    * Our implementation for NORMAL mutexes does not check ownership at all,
    * so call to `pthread_mutex_unlock` on a valid NORMAL mutex always succeeds.
    */
-  assert(pthread_mutex_unlock(&mutex1) == 0);
-  assert(wasHere == 2);
+  assert(pthread_mutex_unlock(&mutex) == 0);
+  assert(pthread_mutex_destroy(&mutex) == 0);
+  assert(pthread_mutexattr_destroy(&mutexAttr) == 0);
 
   return 0;
 }
diff --git a/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4r.c b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4r.c
index 291652f..d42f748 100644
--- a/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4r.c
+++ b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/mutex4r.c
@@ -26,53 +26,46 @@
  *      License along with this library in the file COPYING.LIB;
  *      if not, write to the Free Software Foundation, Inc.,
  *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * --------------------------------------------------------------------------
- *
- * Thread A locks mutex - thread B tries to unlock.
- *
- * Depends on API functions:
- *  pthread_mutex_lock()
- *  pthread_mutex_trylock()
- *  pthread_mutex_unlock()
  */
 
 #include "test.h"
 
-static int wasHere = 0;
+/**
+ * Test Summary:
+ *
+ * Main thread M creates mutex L with type `PTHREAD_MUTEX_RECURSIVE` and
+ * locks it.
+ *
+ * Thread A attempts to unlock L; since M owns L, call to `pthread_mutex_unlock`
+ * must fail with EPERM.
+ *
+ * Thread M unlocks and destroys L.
+ */
 
-static pthread_mutex_t mutex1;
-
-void *unlocker(void *arg)
+static void *ThreadA(void *arg)
 {
-  int expectedResult = (int) (size_t) arg;
-  int h;
-
-  wasHere++;
-  h = pthread_mutex_unlock(&mutex1);
-  printf("*** %d==%d\n\n", h, expectedResult);
-  fflush(stdout);
-  assert(h == expectedResult);
-  wasHere++;
-
-  return NULL;
+  pthread_mutex_t *mutex = arg;
+  assert(pthread_mutex_unlock(mutex) == EPERM);
+  return arg;
 }
 
 int main(void)
 {
-  pthread_t t;
-  pthread_mutexattr_t ma;
+  pthread_mutexattr_t mutexAttr;
+  pthread_mutex_t mutex;
+  pthread_t thread;
+  void *result;
 
-  assert(pthread_mutexattr_init(&ma) == 0);
-
-  wasHere = 0;
-  assert(pthread_mutexattr_settype(&ma, PTHREAD_MUTEX_RECURSIVE) == 0);
-  assert(pthread_mutex_init(&mutex1, &ma) == 0);
-  assert(pthread_mutex_lock(&mutex1) == 0);
-  assert(pthread_create(&t, NULL, unlocker, (void *) EPERM) == 0);
-  assert(pthread_join(t, NULL) == 0);
-  assert(pthread_mutex_unlock(&mutex1) == 0);
-  assert(wasHere == 2);
+  assert(pthread_mutexattr_init(&mutexAttr) == 0);
+  assert(pthread_mutexattr_settype(&mutexAttr, PTHREAD_MUTEX_RECURSIVE) == 0);
+  assert(pthread_mutex_init(&mutex, &mutexAttr) == 0);
+  assert(pthread_mutex_lock(&mutex) == 0);
+  assert(pthread_create(&thread, NULL, ThreadA, &mutex) == 0);
+  assert(pthread_join(thread, &result) == 0);
+  assert(result == &mutex);
+  assert(pthread_mutex_unlock(&mutex) == 0);
+  assert(pthread_mutex_destroy(&mutex) == 0);
+  assert(pthread_mutexattr_destroy(&mutexAttr) == 0);
 
   return 0;
 }
