Handle freezing tests. Fixes #10752.
diff --git a/mesonbuild/mtest.py b/mesonbuild/mtest.py
index 981bc10..f13e755 100644
--- a/mesonbuild/mtest.py
+++ b/mesonbuild/mtest.py
@@ -1265,14 +1265,14 @@
 
                 # Make sure the termination signal actually kills the process
                 # group, otherwise retry with a SIGKILL.
-                with suppress(TimeoutError):
+                with suppress(asyncio.TimeoutError):
                     await asyncio.wait_for(p.wait(), timeout=0.5)
                 if p.returncode is not None:
                     return None
 
                 os.killpg(p.pid, signal.SIGKILL)
 
-            with suppress(TimeoutError):
+            with suppress(asyncio.TimeoutError):
                 await asyncio.wait_for(p.wait(), timeout=1)
             if p.returncode is not None:
                 return None
@@ -1281,7 +1281,7 @@
             # Try to kill it one last time with a direct call.
             # If the process has spawned children, they will remain around.
             p.kill()
-            with suppress(TimeoutError):
+            with suppress(asyncio.TimeoutError):
                 await asyncio.wait_for(p.wait(), timeout=1)
             if p.returncode is not None:
                 return None
diff --git a/test cases/unit/109 freeze/freeze.c b/test cases/unit/109 freeze/freeze.c
new file mode 100644
index 0000000..0a45c1a
--- /dev/null
+++ b/test cases/unit/109 freeze/freeze.c
@@ -0,0 +1,21 @@
+#include<stdio.h>
+#include <signal.h>
+#include <string.h>
+#include <stdlib.h>
+
+static void do_nothing(int signo, siginfo_t *info, void *context) {
+}
+
+int main(int argc, char **argv) {
+    struct sigaction sa;
+    memset(&sa, 0, sizeof(struct sigaction));
+    sa.sa_sigaction = do_nothing;
+    if (sigaction(SIGTERM, &sa, NULL) == -1) {
+        printf("Could not set up signal handler.\n");
+        return 1;
+    }
+    printf("Freezing forever.\n");
+    while(1) {
+    }
+    return 0;
+}
diff --git a/test cases/unit/109 freeze/meson.build b/test cases/unit/109 freeze/meson.build
new file mode 100644
index 0000000..1a84f37
--- /dev/null
+++ b/test cases/unit/109 freeze/meson.build
@@ -0,0 +1,4 @@
+project('freeze', 'c')
+
+e = executable('freeze', 'freeze.c')
+test('freeze', e, timeout: 1)
diff --git a/unittests/linuxliketests.py b/unittests/linuxliketests.py
index a594348..2366df6 100644
--- a/unittests/linuxliketests.py
+++ b/unittests/linuxliketests.py
@@ -1820,3 +1820,12 @@
                 default_symlinks.append(symlink)
                 os.symlink(default_dirs[i], symlink)
             self.assertFalse(cpp.compiler_args([f'-isystem{symlink}' for symlink in default_symlinks]).to_native())
+
+    def test_freezing(self):
+        testdir = os.path.join(self.unit_test_dir, '109 freeze')
+        self.init(testdir)
+        self.build()
+        try:
+            self.run_tests()
+        except subprocess.CalledProcessError as e:
+            self.assertNotIn('Traceback', e.output)