diff options
| author | Christian Krinitsin <mail@krinitsin.com> | 2025-07-03 07:27:52 +0000 |
|---|---|---|
| committer | Christian Krinitsin <mail@krinitsin.com> | 2025-07-03 07:27:52 +0000 |
| commit | d0c85e36e4de67af628d54e9ab577cc3fad7796a (patch) | |
| tree | f8f784b0f04343b90516a338d6df81df3a85dfa2 /results/classifier/deepseek-2-tmp/output/kernel/1887306 | |
| parent | 7f4364274750eb8cb39a3e7493132fca1c01232e (diff) | |
| download | emulator-bug-study-d0c85e36e4de67af628d54e9ab577cc3fad7796a.tar.gz emulator-bug-study-d0c85e36e4de67af628d54e9ab577cc3fad7796a.zip | |
add deepseek and gemma results
Diffstat (limited to 'results/classifier/deepseek-2-tmp/output/kernel/1887306')
| -rw-r--r-- | results/classifier/deepseek-2-tmp/output/kernel/1887306 | 56 |
1 files changed, 0 insertions, 56 deletions
diff --git a/results/classifier/deepseek-2-tmp/output/kernel/1887306 b/results/classifier/deepseek-2-tmp/output/kernel/1887306 deleted file mode 100644 index 0ea9a50c..00000000 --- a/results/classifier/deepseek-2-tmp/output/kernel/1887306 +++ /dev/null @@ -1,56 +0,0 @@ - -qemu-user deadlocks when forked in a multithreaded process - -The following program (also attached) deadlocks when run under QEMU user on Linux. - -#include <pthread.h> -#include <stdio.h> -#include <stdlib.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <unistd.h> - -#define NUM_THREADS 100 -#define NUM_FORKS 10 - -pthread_barrier_t barrier; - -void *t(void *arg) { - for (int i = 0; i < NUM_FORKS; i++) { - pid_t pid = fork(); - if (pid < 0) - abort(); - if (!pid) - _exit(0); - if (waitpid(pid, NULL, 0) < 0) - abort(); - } - //pthread_barrier_wait(&barrier); - return NULL; -} - -int main(void) { - pthread_barrier_init(&barrier, NULL, NUM_THREADS); - pthread_t ts[NUM_THREADS]; - for (size_t i = 0; i < NUM_THREADS; i++) { - if (pthread_create(&ts[i], NULL, t, NULL)) - abort(); - } - for (size_t i = 0; i < NUM_THREADS; i++) { - pthread_join(ts[i], NULL); - } - printf("Done: %d\n", getpid()); - return 0; -} - -To reproduce: -$ gcc test.c -pthread -$ while qemu-x86_64 ./a.out; do :; done - -(Be careful, Ctrl-C/SIGINT doesn't kill the deadlocked child). - -Larger values of NUM_THREADS/NUM_FORKS lead to more often deadlocks. With the values above it often deadlocks on the first try on my machine. When it deadlocks, there is a child qemu process with two threads which is waited upon by one of the worker threads of the parent. - -I tried to avoid the deadlock by serializing fork() with a mutex, but it didn't help. However, ensuring that no thread exits until all forks are done (by adding a barrier to t()) does seem to help, at least, the program above could run for a half an hour until I terminated it. - -Tested on QEMU 5.0.0, 4.2.0 and 2.11.1, with x86_64 and AArch64 linux-user targets. \ No newline at end of file |