now runs with -O2

This commit is contained in:
nova
2025-07-13 21:53:59 +02:00
parent 4092446825
commit b9c254a0fe
3 changed files with 37 additions and 33 deletions

View File

@ -3,10 +3,10 @@
#include <dirent.h> #include <dirent.h>
#include <stdlib.h> #include <stdlib.h>
#include <strings.h> #include <strings.h>
#include <signal.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
#include <signal.h>
#include "defines.h" #include "defines.h"
#include "config.h" #include "config.h"
@ -246,7 +246,7 @@ void move_right(){
cmd = concat(cmd, "\""); cmd = concat(cmd, "\"");
btm_buffer = malloc(strlen(cmd)); btm_buffer = malloc(strlen(cmd));
strcpy(btm_buffer, cmd); strcpy(btm_buffer, cmd-1);
if (system(cmd) == -1) { if (system(cmd) == -1) {

16
main.c
View File

@ -75,19 +75,19 @@ int main(){
pthread_cancel(thread_t); pthread_cancel(thread_t);
} }
if (threading) { if (threading) {
pthread_join(thread_t, NULL);
pthread_join(thread_l, NULL);
pthread_join(thread_m, NULL);
pthread_join(thread_b, NULL); pthread_join(thread_b, NULL);
pthread_join(thread_r, NULL); pthread_join(thread_r, NULL);
pthread_join(thread_m, NULL);
pthread_join(thread_l, NULL);
pthread_join(thread_t, NULL);
threading = 0; threading = 0;
} }
if (status & STATUS_RUN_BACKEND) { if (status & STATUS_RUN_BACKEND) {
pthread_create(&thread_t, NULL, thread_top, win_t); /*top bar*/ pthread_create(&thread_t, NULL, thread_top, &status); /*top bar*/
pthread_create(&thread_l, NULL, thread_lft, win_l); /*current_content slash win_m*/ pthread_create(&thread_l, NULL, thread_lft, &status); /*parent_content slash win_l*/
pthread_create(&thread_m, NULL, thread_mid, win_m); /*parent_content slash win_l*/ pthread_create(&thread_m, NULL, thread_mid, &status); /*current_content slash win_m*/
pthread_create(&thread_r, NULL, thread_rgt, win_r); /*child_content slash win_r*/ pthread_create(&thread_b, NULL, thread_btm, &status); /*bottom bar*/
pthread_create(&thread_b, NULL, thread_btm, win_b); /*bottom bar*/ pthread_create(&thread_r, NULL, thread_rgt, &status); /*child_content slash win_r*/
status &= ~(STATUS_RUN_BACKEND | STATUS_RELOAD_DIRECTORY); status &= ~(STATUS_RUN_BACKEND | STATUS_RELOAD_DIRECTORY);
status |= STATUS_UPDATE_SCREEN_0; status |= STATUS_UPDATE_SCREEN_0;
threading = 1; threading = 1;

View File

@ -18,7 +18,7 @@ pthread_mutex_t mutex_rgt;
pthread_mutex_t mutex_selection; pthread_mutex_t mutex_selection;
pthread_mutex_t mutex_wait; pthread_mutex_t mutex_wait;
pthread_cond_t cond_wait; pthread_cond_t cond_wait;
int wait_count; /* this is used to determine how many threads are waiting for cont_wait */ volatile char wait_count; /* this is used to determine how many threads are waiting for cont_wait */
file *rgt_content; file *rgt_content;
file *mid_content; file *mid_content;
@ -39,12 +39,11 @@ unsigned long top_width;
unsigned long selected_file_current=0; unsigned long selected_file_current=0;
unsigned long selected_file_last=0; unsigned long selected_file_last=0;
unsigned int status_mid;
extern unsigned int status;
extern unsigned int terminal_width; extern unsigned int terminal_width;
void *thread_mid(void *data){ void *thread_mid(void *data){
unsigned int status = *(unsigned int*)data;
pthread_mutex_lock(&mutex_mid); pthread_mutex_lock(&mutex_mid);
@ -98,10 +97,9 @@ void *thread_mid(void *data){
pthread_mutex_lock(&mutex_selection); pthread_mutex_lock(&mutex_selection);
while(1) { /* this useless while loop exists for the singular purpose of making valgrind happy */
if (selected_file_current >= mid_file_count) { if (selected_file_current >= mid_file_count) {
selected_file_current = mid_file_count-1; selected_file_current = mid_file_count-1;
} else { }
mid_content[selected_file_current].status |= FILE_STATUS_HOVER; mid_content[selected_file_current].status |= FILE_STATUS_HOVER;
if (selected_file_current != selected_file_last) { if (selected_file_current != selected_file_last) {
mid_content[selected_file_last].status &= ~FILE_STATUS_HOVER; mid_content[selected_file_last].status &= ~FILE_STATUS_HOVER;
@ -116,16 +114,14 @@ void *thread_mid(void *data){
file_current->permissions = mid_content[selected_file_current].permissions; file_current->permissions = mid_content[selected_file_current].permissions;
file_current->status = mid_content[selected_file_current].status; file_current->status = mid_content[selected_file_current].status;
pthread_mutex_unlock(&mutex_selection);
while(wait_count < 2){ while(wait_count < 2){
/*wait for thread_rgt and thread_btm to lock*/ /*wait for thread_rgt and thread_btm to lock*/
} }
pthread_mutex_lock(&mutex_wait); pthread_mutex_lock(&mutex_wait);
pthread_cond_broadcast(&cond_wait); pthread_cond_broadcast(&cond_wait);
pthread_mutex_unlock(&mutex_wait); pthread_mutex_unlock(&mutex_wait);
break;
}
}
pthread_mutex_unlock(&mutex_selection);
} }
free(path); free(path);
@ -133,6 +129,7 @@ void *thread_mid(void *data){
pthread_exit(0); pthread_exit(0);
} }
void *thread_lft(void *data){ void *thread_lft(void *data){
unsigned int status = *(unsigned int*)data;
pthread_mutex_lock(&mutex_lft); pthread_mutex_lock(&mutex_lft);
char *path; char *path;
@ -162,6 +159,7 @@ void *thread_lft(void *data){
} }
void *thread_rgt(void *data){ void *thread_rgt(void *data){
unsigned int status = *(unsigned int*)data;
pthread_mutex_lock(&mutex_rgt); pthread_mutex_lock(&mutex_rgt);
pthread_mutex_lock(&mutex_wait); pthread_mutex_lock(&mutex_wait);
wait_count++; wait_count++;
@ -170,7 +168,7 @@ void *thread_rgt(void *data){
pthread_mutex_unlock(&mutex_wait); pthread_mutex_unlock(&mutex_wait);
pthread_mutex_lock(&mutex_mid); pthread_mutex_lock(&mutex_selection);
free(rgt_content); free(rgt_content);
rgt_content = malloc(sizeof(file)); rgt_content = malloc(sizeof(file));
rgt_content->file_name = malloc(file_current->file_name_width + 1); rgt_content->file_name = malloc(file_current->file_name_width + 1);
@ -179,7 +177,7 @@ void *thread_rgt(void *data){
rgt_content->file_size = file_current->file_size; rgt_content->file_size = file_current->file_size;
rgt_content->file_type = file_current->file_type; rgt_content->file_type = file_current->file_type;
rgt_content->status = file_current->status; rgt_content->status = file_current->status;
pthread_mutex_unlock(&mutex_mid); pthread_mutex_unlock(&mutex_selection);
if (rgt_content->file_type == FILE_TYPE_DIR || rgt_content->file_type == FILE_TYPE_SYMLINK) { if (rgt_content->file_type == FILE_TYPE_DIR || rgt_content->file_type == FILE_TYPE_SYMLINK) {
char *path = malloc(rgt_content[0].file_name_width + 1); char *path = malloc(rgt_content[0].file_name_width + 1);
@ -213,6 +211,7 @@ void *thread_rgt(void *data){
pthread_exit(0); pthread_exit(0);
} }
void *thread_top(void *data){ void *thread_top(void *data){
unsigned int status = *(unsigned int*)data;
pthread_mutex_lock(&mutex_top); pthread_mutex_lock(&mutex_top);
free(top_buffer); free(top_buffer);
@ -231,6 +230,7 @@ void *thread_top(void *data){
pthread_exit(0); pthread_exit(0);
} }
void *thread_btm(void *data){ void *thread_btm(void *data){
unsigned int status = *(unsigned int*)data;
pthread_mutex_lock(&mutex_btm); pthread_mutex_lock(&mutex_btm);
pthread_mutex_lock(&mutex_wait); pthread_mutex_lock(&mutex_wait);
wait_count++; wait_count++;
@ -284,12 +284,16 @@ void threading_init(){
file_current->file_name = malloc(sizeof("a")); file_current->file_name = malloc(sizeof("a"));
strcpy(file_current->file_name, "a"); strcpy(file_current->file_name, "a");
pthread_mutex_init(&mutex_top, NULL); volatile char vol; /* needed to make sure higher optimization steps dont move these around */
pthread_mutex_init(&mutex_mid, NULL); vol = pthread_mutex_init(&mutex_top, NULL);
pthread_mutex_init(&mutex_lft, NULL); vol = pthread_mutex_init(&mutex_mid, NULL);
pthread_mutex_init(&mutex_selection, NULL); vol = pthread_mutex_init(&mutex_lft, NULL);
pthread_mutex_init(&mutex_wait, NULL); vol = pthread_mutex_init(&mutex_btm, NULL);
pthread_cond_init(&cond_wait, NULL); vol = pthread_mutex_init(&mutex_rgt, NULL);
vol = pthread_mutex_init(&mutex_selection, NULL);
vol = pthread_mutex_init(&mutex_wait, NULL);
vol = pthread_cond_init(&cond_wait, NULL);
vol;
selected_file_current = 0; selected_file_current = 0;
selected_file_last = 0; selected_file_last = 0;
} }