general stability improvements

This commit is contained in:
nova
2025-07-23 19:47:37 +02:00
parent 6daeaebb5a
commit a99a519834
7 changed files with 68 additions and 64 deletions

View File

@@ -21,14 +21,14 @@ pthread_cond_t cond_wait;
volatile char wait_count; /* this is used to determine how many threads are waiting for cont_wait */
file *rgt_content;
file *mid_content;
volatile file *mid_content;
file *lft_content;
char *rgt_buffer; /* used for file previews, unlike rgt_content, which is used for directory previews */
char *btm_buffer;
char *top_buffer; /* current path */
file *file_current;
char *top_buffer; /* current path */
unsigned long rgt_file_count;
unsigned long mid_file_count;
@@ -37,13 +37,13 @@ unsigned long top_width;
unsigned long selected_file_current=0;
unsigned long selected_file_last=0;
volatile unsigned long selected_file_current = 0;
volatile unsigned long selected_file_last = 0;
extern unsigned int terminal_width;
void *thread_mid(void *data){
unsigned int status = *(unsigned int*)data;
volatile unsigned int status = *(unsigned int*)data;
pthread_mutex_lock(&mutex_mid);
@@ -64,6 +64,7 @@ void *thread_mid(void *data){
memset(mid_content, ' ', mid_file_count * sizeof(file));
get_dir_content(path, &mid_file_count, mid_content);
} else {
selected_file_current = 0;
mid_content = malloc(sizeof(file));
mid_content->status = FILE_STATUS_DIR_EMPTY;
mid_content->file_type = 0;
@@ -72,6 +73,7 @@ void *thread_mid(void *data){
mid_content->color_pair = 0;
mid_content->file_name_width = sizeof("empty dir");
mid_content->file_name = "empty dir";
/*
file_current->file_name = mid_content->file_name;
file_current->file_name_width = mid_content->file_name_width;
@@ -80,6 +82,7 @@ void *thread_mid(void *data){
file_current->color_pair = mid_content->color_pair;
file_current->permissions = mid_content->permissions;
file_current->status = mid_content->status;
*/
mid_file_count = 0;
while(wait_count < 2){
@@ -95,25 +98,28 @@ void *thread_mid(void *data){
}
}
pthread_mutex_lock(&mutex_selection);
if (selected_file_current >= mid_file_count) {
selected_file_current = mid_file_count-1;
selected_file_current = mid_file_count-1;
}
mid_content[selected_file_current].status |= FILE_STATUS_HOVER;
if (selected_file_current != selected_file_last) {
mid_content[selected_file_last].status &= ~FILE_STATUS_HOVER;
}
selected_file_last = selected_file_current;
if (selected_file_current != selected_file_last) {
mid_content[selected_file_last].status &= ~FILE_STATUS_HOVER;
}
selected_file_last = selected_file_current;
free(file_current);
file_current = malloc(sizeof(file));
file_current->file_name = mid_content[selected_file_current].file_name;
file_current->file_name_width = mid_content[selected_file_current].file_name_width;
file_current->file_size = mid_content[selected_file_current].file_size;
file_current->file_type = mid_content[selected_file_current].file_type;
file_current->color_pair = mid_content[selected_file_current].color_pair;
file_current->permissions = mid_content[selected_file_current].permissions;
file_current->status = mid_content[selected_file_current].status;
file_current->file_name_width = mid_content[selected_file_current].file_name_width;
file_current->file_name = malloc(file_current->file_name_width);
memcpy(file_current->file_name, mid_content[selected_file_current].file_name, file_current->file_name_width);
file_current->file_size = mid_content[selected_file_current].file_size;
file_current->file_type = mid_content[selected_file_current].file_type;
file_current->color_pair = mid_content[selected_file_current].color_pair;
file_current->permissions = mid_content[selected_file_current].permissions;
mid_content[selected_file_current].status |= FILE_STATUS_HOVER;
file_current->status = mid_content[selected_file_current].status;
pthread_mutex_unlock(&mutex_selection);
while(wait_count < 2){
@@ -172,7 +178,8 @@ void *thread_rgt(void *data){
free(rgt_content);
rgt_content = malloc(sizeof(file));
rgt_content->file_name = malloc(file_current->file_name_width + 1);
strcpy(rgt_content->file_name, file_current->file_name);
memcpy(rgt_content->file_name, file_current->file_name, file_current->file_name_width);
rgt_content->file_name[file_current->file_name_width] = '\0';
rgt_content->file_name_width = file_current->file_name_width;
rgt_content->file_size = file_current->file_size;
rgt_content->file_type = file_current->file_type;
@@ -192,7 +199,7 @@ void *thread_rgt(void *data){
free(rgt_buffer);
rgt_buffer = malloc(sizeof(char));
memset(rgt_buffer, ' ', sizeof(char));
rgt_buffer[0] = '\0';
} else {
rgt_file_count = 0;
@@ -266,23 +273,23 @@ void threading_init(){
top_buffer = malloc(sizeof(char));
rgt_buffer = malloc(sizeof(char));
btm_buffer = malloc(sizeof(char));
memset(top_buffer, ' ', sizeof(char));
memset(rgt_buffer, ' ', sizeof(char));
memset(btm_buffer, ' ', sizeof(char));
memset(top_buffer, '\0', sizeof(char));
memset(rgt_buffer, '\0', sizeof(char));
memset(btm_buffer, '\0', sizeof(char));
rgt_content[0].file_type = 0;
rgt_content[0].file_size = 1;
rgt_content[0].file_name_width = 1;
rgt_content[0].file_name = malloc(sizeof("a"));
strcpy(rgt_content[0].file_name, "a");
rgt_content->file_type = 0;
rgt_content->file_size = 0;
rgt_content->file_name_width = 0;
rgt_content->file_name = malloc(sizeof(char));
rgt_content->file_name[0] = '\0';
file_current = malloc(sizeof(file));
file_current->file_type = 0;
file_current->file_size = 1;
file_current->file_name_width = 1;
file_current->file_name = malloc(sizeof("a"));
strcpy(file_current->file_name, "a");
file_current->file_size = 0;
file_current->file_name_width = 0;
file_current->file_name = malloc(sizeof(char));
file_current->file_name[0] = '\0';
volatile char vol; /* needed to make sure higher optimization steps dont move these around */
vol = pthread_mutex_init(&mutex_top, NULL);