add a flag to exit while loop for each worker thread

remove_atomic_variables_for_self_to_localqueue
Xiaosu Lyu 3 years ago
parent acf7868430
commit 7841162eee

@ -25,6 +25,7 @@
#include "scheduler_options.h"
#include "sandbox_set_as_init.h"
extern thread_local bool pthread_stop;
extern thread_local bool get_first_request;
/**
* This scheduler provides for cooperative and preemptive multitasking in a OS process's userspace.
@ -402,7 +403,7 @@ scheduler_switch_to_base_context(struct arch_context *current_context)
static inline void
scheduler_idle_loop()
{
while (true) {
while (!pthread_stop) {
/* Assumption: only called by the "base context" */
assert(current_sandbox_get() == NULL);

@ -30,6 +30,7 @@
extern uint64_t total_held[1024];
extern uint64_t longest_held[1024];
extern uint32_t total_global_requests;
extern thread_local bool pthread_stop;
thread_local _Atomic volatile sig_atomic_t handler_depth = 0;
thread_local _Atomic volatile sig_atomic_t deferred_sigalrm = 0;
@ -235,19 +236,26 @@ software_interrupt_handle_signals(int signal_type, siginfo_t *signal_info, void
uint32_t total_sandboxes_error = atomic_load(&sandbox_state_totals[SANDBOX_ERROR]);
printf("throughput is %f error request is %u global total request %d worker %d total requests is %u time %f worker total_held %"PRIu64" longest_held %"PRIu64" listener total_held %"PRIu64" longest_held %"PRIu64" total gr %u\n", throughput, total_sandboxes_error, atomic_load(&sandbox_state_totals[SANDBOX_COMPLETE]), worker_thread_idx, total_local_requests, seconds, total_held[worker_thread_idx], longest_held[worker_thread_idx], total_held[200], longest_held[200], total_global_requests);
fflush(stdout);
pthread_exit(0);
//pthread_exit(0);
pthread_stop = true;
}
default: {
const char *signal_name = strsignal(signal_type);
switch (signal_info->si_code) {
case SI_TKILL:
panic("software_interrupt_handle_signals unexpectedly received signal %s from a thread kill\n",
signal_name);
//panic("software_interrupt_handle_signals unexpectedly received signal %s from a thread kill\n",
// signal_name);
printf("software_interrupt_handle_signals unexpectedly received signal %s from a thread kill\n",
signal_name);
case SI_KERNEL:
panic("software_interrupt_handle_signals unexpectedly received signal %s from the kernel\n",
//panic("software_interrupt_handle_signals unexpectedly received signal %s from the kernel\n",
// signal_name);
printf("software_interrupt_handle_signals unexpectedly received signal %s from the kernel\n",
signal_name);
default:
panic("software_interrupt_handle_signals unexpectedly received signal %s with si_code %d\n",
//panic("software_interrupt_handle_signals unexpectedly received signal %s with si_code %d\n",
// signal_name, signal_info->si_code);
printf("software_interrupt_handle_signals unexpectedly received signal %s with si_code %d\n",
signal_name, signal_info->si_code);
}
}

@ -31,6 +31,7 @@ thread_local struct arch_context worker_thread_base_context;
thread_local int worker_thread_idx;
thread_local bool get_first_request = false;
thread_local bool pthread_stop = false;
/* Used to track tenants' timeouts */
thread_local struct priority_queue *worker_thread_timeout_queue;

Loading…
Cancel
Save