1
0
mirror of https://gittea.dev/nova/th.git synced 2025-10-22 02:40:15 -04:00

accounted for some race conditions

This commit is contained in:
nova
2025-09-29 21:40:35 +02:00
parent 4d9dc46691
commit b32848ad3d
2 changed files with 36 additions and 8 deletions

View File

@@ -17,6 +17,7 @@ extern unsigned int file_modifiers;
extern pthread_mutex_t mutex_selection; extern pthread_mutex_t mutex_selection;
extern pthread_mutex_t mutex_rgt; extern pthread_mutex_t mutex_rgt;
extern pthread_mutex_t mutex_mid; extern pthread_mutex_t mutex_mid;
extern pthread_mutex_t mutex_btm;
extern pthread_cond_t cond_rgt; extern pthread_cond_t cond_rgt;
extern file *mid_content; extern file *mid_content;
extern file *lft_content; extern file *lft_content;
@@ -329,6 +330,8 @@ void jump_top(){
} }
void open_with(){ void open_with(){
pthread_mutex_lock(&mutex_btm);
btm_buffer = concat("open \"", mid_content[selected_file_current].file_name); btm_buffer = concat("open \"", mid_content[selected_file_current].file_name);
btm_buffer = concat(btm_buffer, "\" with:"); btm_buffer = concat(btm_buffer, "\" with:");
@@ -372,6 +375,7 @@ void open_with(){
} }
void rename_hovered(){ void rename_hovered(){
pthread_mutex_lock(&mutex_btm);
btm_buffer = concat("rename \"", mid_content[selected_file_current].file_name); btm_buffer = concat("rename \"", mid_content[selected_file_current].file_name);
btm_buffer = concat(btm_buffer, "\" to:"); btm_buffer = concat(btm_buffer, "\" to:");
@@ -411,6 +415,7 @@ void rename_hovered(){
} }
void delete(){ void delete(){
pthread_mutex_lock(&mutex_btm);
unsigned int i = 0; unsigned int i = 0;
unsigned int hits = 0; unsigned int hits = 0;
@@ -440,8 +445,9 @@ void delete(){
mvwin(win_b, terminal_height-6, 0); mvwin(win_b, terminal_height-6, 0);
wresize(win_b, 5, terminal_width/3); /*the div3 just looks cool*/ wresize(win_b, 5, terminal_width/3); /*the div3 just looks cool*/
pthread_mutex_unlock(&mutex_btm);
render_pass(); render_pass();
pthread_mutex_lock(&mutex_btm);
timeout(-1); /* negative numbers block until enter is pressed */ timeout(-1); /* negative numbers block until enter is pressed */
/* TODO(2025-06-22T01:24:30) fix fixed buffer size */ /* TODO(2025-06-22T01:24:30) fix fixed buffer size */
@@ -480,15 +486,22 @@ void delete(){
if (hits) { if (hits) {
free(file_str); free(file_str);
} }
pthread_mutex_unlock(&mutex_btm);
} }
void makedir(){ void makedir(){
btm_buffer = "create dir: "; pthread_mutex_lock(&mutex_btm);
status |= STATUS_UPDATE_SCREEN_0;
werase(win_b); werase(win_b);
mvwin(win_b, terminal_height-6, 0); mvwin(win_b, terminal_height-6, 0);
wresize(win_b, 5, terminal_width/3); /*the div3 just looks cool*/ wresize(win_b, 5, terminal_width/3); /*the div3 just looks cool*/
memset(btm_buffer, ' ', terminal_width);
memcpy(btm_buffer, "create dir: ", strlen("create dir: "));
status |= STATUS_UPDATE_SCREEN_0;
pthread_mutex_unlock(&mutex_btm);
render_pass(); render_pass();
pthread_mutex_lock(&mutex_btm);
unsigned long local_height; unsigned long local_height;
local_height = getmaxy(win_b); local_height = getmaxy(win_b);
@@ -505,14 +518,20 @@ void makedir(){
} }
free(str); free(str);
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_MASK | STATUS_RELOAD_DIRECTORY | STATUS_UPDATE_SCREEN_RELOAD_FULL); status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_MASK | STATUS_RELOAD_DIRECTORY | STATUS_UPDATE_SCREEN_RELOAD_FULL);
pthread_mutex_unlock(&mutex_btm);
} }
void makefile(){ void makefile(){
btm_buffer = "create file: "; pthread_mutex_lock(&mutex_btm);
memcpy(btm_buffer, "create file: ", strlen("create file: "));
status |= STATUS_UPDATE_SCREEN_0; status |= STATUS_UPDATE_SCREEN_0;
werase(win_b); werase(win_b);
mvwin(win_b, terminal_height-6, 0); mvwin(win_b, terminal_height-6, 0);
wresize(win_b, 5, terminal_width/3); /*the div3 just looks cool*/ wresize(win_b, 5, terminal_width/3); /*the div3 just looks cool*/
pthread_mutex_unlock(&mutex_btm);
render_pass(); render_pass();
pthread_mutex_lock(&mutex_btm);
unsigned long local_height; unsigned long local_height;
local_height = getmaxy(win_b); local_height = getmaxy(win_b);
@@ -621,6 +640,7 @@ void order_by(int passes, int index){
} }
void cmd_on_selected(int passes, int index){ void cmd_on_selected(int passes, int index){
(void)passes; (void)passes;
pthread_mutex_lock(&mutex_btm);
unsigned int i = 0; unsigned int i = 0;
unsigned int hits = 0; unsigned int hits = 0;
@@ -651,7 +671,9 @@ void cmd_on_selected(int passes, int index){
mvwin(win_b, terminal_height-6, 0); mvwin(win_b, terminal_height-6, 0);
wresize(win_b, 5, terminal_width/3); /*the div3 just looks cool*/ wresize(win_b, 5, terminal_width/3); /*the div3 just looks cool*/
pthread_mutex_unlock(&mutex_btm);
render_pass(); render_pass();
pthread_mutex_lock(&mutex_btm);
timeout(-1); /* negative numbers block until enter is pressed */ timeout(-1); /* negative numbers block until enter is pressed */
@@ -675,7 +697,7 @@ void cmd_on_selected(int passes, int index){
} }
} }
free(btm_buffer); free(btm_buffer);
btm_buffer = concat("completed: ", key_binding[index].black_magic); memcpy(btm_buffer, "completed: ", strlen("completed: "));
} else { } else {
free(btm_buffer); free(btm_buffer);
free(cmd); free(cmd);
@@ -693,7 +715,7 @@ void cmd_on_selected(int passes, int index){
} else { } else {
free(btm_buffer); free(btm_buffer);
btm_buffer = "cancled deletion"; memcpy(btm_buffer, "cancled deletion", strlen("cancled deletion"));
} }
timeout(10); timeout(10);
@@ -702,6 +724,7 @@ void cmd_on_selected(int passes, int index){
if (hits) { if (hits) {
free(file_str); free(file_str);
} }
pthread_mutex_unlock(&mutex_btm);
} }
void yank_text(int passes, int index){ void yank_text(int passes, int index){
(void)passes; (void)passes;
@@ -805,12 +828,15 @@ void paste(){
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_MASK | STATUS_RELOAD_DIRECTORY | STATUS_UPDATE_SCREEN_RELOAD_FULL); status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_MASK | STATUS_RELOAD_DIRECTORY | STATUS_UPDATE_SCREEN_RELOAD_FULL);
} }
void search(){ void search(){
pthread_mutex_lock(&mutex_btm);
unsigned long local_height; unsigned long local_height;
local_height = getmaxy(win_b); local_height = getmaxy(win_b);
memset(search_buffer, '\0', 255); memset(search_buffer, '\0', 255);
pthread_mutex_unlock(&mutex_btm);
render_pass(); render_pass();
pthread_mutex_lock(&mutex_btm);
curs_set(1); curs_set(1);
@@ -868,6 +894,7 @@ void search(){
update_selected_file(); update_selected_file();
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_0); status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_0);
pthread_mutex_unlock(&mutex_btm);
} }
void search_next(){ void search_next(){
unsigned long i; unsigned long i;

View File

@@ -315,6 +315,7 @@ void *thread_btm(){
btm_buffer[offset_back - 2] = size_unit[(unsigned)size_index]; btm_buffer[offset_back - 2] = size_unit[(unsigned)size_index];
offset_back -= strlen(float_str) + 2; offset_back -= strlen(float_str) + 2;
memcpy(btm_buffer + offset_back, float_str, strlen(float_str)); memcpy(btm_buffer + offset_back, float_str, strlen(float_str));
free(path);
pthread_mutex_unlock(&mutex_btm); pthread_mutex_unlock(&mutex_btm);
} }