[Bug 282713] Process enters in STOP state and doesn't respond to any signal.
Date: Mon, 18 Nov 2024 16:13:24 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=282713 --- Comment #9 from Rupesh Pilania <rupeshpilania@gmail.com> --- Running two instances are enough to bring system less responsive. Running 5 instances will cause system Freeze. Compiled using cc -lpthread. #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> #define NUM_THREADS 1000 // Number of threads; adjust based on system capability #define NUM_ITERATIONS 100000 // Number of iterations per thread pthread_mutex_t lock; pthread_mutexattr_t attr; void handle_error(int err, const char *msg) { fprintf(stderr, "%s: %s\n", msg, strerror(err)); exit(EXIT_FAILURE); } void *thread_func(void *arg) { int thread_num = *((int *)arg); free(arg); // Free allocated memory for thread argument for (int i = 0; i < NUM_ITERATIONS; i++) { // Lock and unlock the mutex to simulate contention if (pthread_mutex_lock(&lock) != 0) { perror("Failed to lock mutex"); } // Simulate some work inside the critical section // (we keep it minimal to maximize lock contention) if (pthread_mutex_unlock(&lock) != 0) { perror("Failed to unlock mutex"); } // Small sleep to prevent the system from just cycling too quickly usleep(1); } printf("Thread %d completed.\n", thread_num); return NULL; } int keep_create_threads() { pthread_t threads[NUM_THREADS]; //pthread_mutex_init(&lock, NULL); int err; // Initialize mutex attributes err = pthread_mutexattr_init(&attr); if (err != 0) handle_error(err, "pthread_mutexattr_init"); // Set the mutex as robust err = pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST); if (err != 0) handle_error(err, "pthread_mutexattr_setrobust"); // Initialize the mutex with the robust attribute err = pthread_mutex_init(&lock, &attr); if (err != 0) handle_error(err, "pthread_mutex_init"); // Create threads for (int i = 0; i < NUM_THREADS; i++) { int *thread_num = malloc(sizeof(int)); // Allocate memory for each thread's number if (!thread_num) { perror("Failed to allocate memory for thread number"); exit(EXIT_FAILURE); } *thread_num = i; if (pthread_create(&threads[i], NULL, thread_func, thread_num) != 0) { perror("Failed to create thread"); exit(EXIT_FAILURE); } } // Wait for all threads to finish for (int i = 0; i < NUM_THREADS; i++) { if (pthread_join(threads[i], NULL) != 0) { perror("Failed to join thread"); } } pthread_mutex_destroy(&lock); printf("All threads completed.\n"); return 0; } int main() { while(1){ keep_create_threads(); } return 0; } -- You are receiving this mail because: You are the assignee for the bug.