list: debug mutex dead lock

This commit is contained in:
2025-09-26 00:57:40 +02:00
parent fce279c590
commit 16a2dea9c0
+52 -5
View File
@@ -80,6 +80,7 @@ GENERATE_LIST_ALL(TYPE_PTR)
void push_back_list_##type(struct main_list_##type *var_list, type value){\ void push_back_list_##type(struct main_list_##type *var_list, type value){\
struct list_##type * list_to_add = malloc(sizeof(struct list_##type));\ struct list_##type * list_to_add = malloc(sizeof(struct list_##type));\
list_to_add->value = value;\ list_to_add->value = value;\
pthread_mutex_lock(var_list->mut_list);\
list_to_add->index = var_list->size;\ list_to_add->index = var_list->size;\
list_to_add->preview = var_list->end_list;\ list_to_add->preview = var_list->end_list;\
list_to_add->next = NULL;\ list_to_add->next = NULL;\
@@ -92,11 +93,13 @@ GENERATE_LIST_ALL(TYPE_PTR)
}\ }\
var_list->end_list = list_to_add;\ var_list->end_list = list_to_add;\
++(var_list->size);\ ++(var_list->size);\
pthread_mutex_unlock(var_list->mut_list);\
}\ }\
void push_front_list_##type(struct main_list_##type *var_list, type value){\ void push_front_list_##type(struct main_list_##type *var_list, type value){\
struct list_##type * list_to_add = malloc(sizeof(struct list_##type));\ struct list_##type * list_to_add = malloc(sizeof(struct list_##type));\
list_to_add->value = value;\ list_to_add->value = value;\
list_to_add->preview = NULL;\ list_to_add->preview = NULL;\
pthread_mutex_lock(var_list->mut_list);\
list_to_add->next = var_list->begin_list;\ list_to_add->next = var_list->begin_list;\
if(var_list->begin_list){\ if(var_list->begin_list){\
(var_list->begin_list)->preview = list_to_add;\ (var_list->begin_list)->preview = list_to_add;\
@@ -113,13 +116,22 @@ GENERATE_LIST_ALL(TYPE_PTR)
list_to_add->index = index++;\ list_to_add->index = index++;\
list_to_add = list_to_add->next;\ list_to_add = list_to_add->next;\
}\ }\
pthread_mutex_unlock(var_list->mut_list);\
}\ }\
size_t move_current_to_index_list_##type(struct main_list_##type *var_list, size_t index){\ size_t move_current_to_index_list_##type(struct main_list_##type *var_list, size_t index){\
if(index == var_list->current_index) return index;\ pthread_mutex_lock(var_list->mut_list);\
if(var_list->begin_list == NULL) return 0;\ if(index == var_list->current_index){\
pthread_mutex_unlock(var_list->mut_list);\
return index;\
}\
if(var_list->begin_list == NULL){\
pthread_mutex_unlock(var_list->mut_list);\
return 0;\
}\
if(index >= var_list->size){\ if(index >= var_list->size){\
var_list->current_list = var_list->end_list;\ var_list->current_list = var_list->end_list;\
var_list->current_index = var_list->size - 1;\ var_list->current_index = var_list->size - 1;\
pthread_mutex_unlock(var_list->mut_list);\
return var_list->size - 1;\ return var_list->size - 1;\
}\ }\
if((var_list->current_index >= var_list->size) || !(var_list->current_list)){\ if((var_list->current_index >= var_list->size) || !(var_list->current_list)){\
@@ -143,18 +155,29 @@ GENERATE_LIST_ALL(TYPE_PTR)
for(size_t i=0; i < array_diff_index[1]; ++i) var_list->current_list = (var_list->current_list)->next; \ for(size_t i=0; i < array_diff_index[1]; ++i) var_list->current_list = (var_list->current_list)->next; \
\ \
var_list->current_index = index;\ var_list->current_index = index;\
pthread_mutex_unlock(var_list->mut_list);\
return index;\ return index;\
}\ }\
size_t move_current_to_begin_list_##type(struct main_list_##type *var_list){\ size_t move_current_to_begin_list_##type(struct main_list_##type *var_list){\
if(var_list->begin_list == NULL) return 0;\ pthread_mutex_lock(var_list->mut_list);\
if(var_list->begin_list == NULL){\
pthread_mutex_unlock(var_list->mut_list);\
return 0;\
}\
var_list->current_list = var_list->begin_list;\ var_list->current_list = var_list->begin_list;\
var_list->current_index = 0;\ var_list->current_index = 0;\
pthread_mutex_unlock(var_list->mut_list);\
return 0;\ return 0;\
}\ }\
size_t move_current_to_end_list_##type(struct main_list_##type *var_list){\ size_t move_current_to_end_list_##type(struct main_list_##type *var_list){\
if(var_list->end_list == NULL) return 0;\ pthread_mutex_lock(var_list->mut_list);\
if(var_list->end_list == NULL){\
pthread_mutex_unlock(var_list->mut_list);\
return 0;\
}\
var_list->current_list = var_list->end_list;\ var_list->current_list = var_list->end_list;\
var_list->current_index = var_list->size - 1;\ var_list->current_index = var_list->size - 1;\
pthread_mutex_unlock(var_list->mut_list);\
return var_list->current_index;\ return var_list->current_index;\
}\ }\
void insert_into_list_##type(struct main_list_##type *var_list, size_t index, type value ){\ void insert_into_list_##type(struct main_list_##type *var_list, size_t index, type value ){\
@@ -163,6 +186,7 @@ GENERATE_LIST_ALL(TYPE_PTR)
if(var_list->begin_list == NULL){\ if(var_list->begin_list == NULL){\
list_to_add->preview = NULL;\ list_to_add->preview = NULL;\
list_to_add->next = NULL;\ list_to_add->next = NULL;\
pthread_mutex_lock(var_list->mut_list);\
var_list->begin_list = list_to_add;\ var_list->begin_list = list_to_add;\
var_list->end_list = list_to_add;\ var_list->end_list = list_to_add;\
var_list->current_list = list_to_add;\ var_list->current_list = list_to_add;\
@@ -170,6 +194,7 @@ GENERATE_LIST_ALL(TYPE_PTR)
\ \
}else {\ }else {\
size_t ii = move_current_to_index_list_##type(var_list, index);\ size_t ii = move_current_to_index_list_##type(var_list, index);\
pthread_mutex_lock(var_list->mut_list);\
if(index > ii)\ if(index > ii)\
printf("%ld out of range, we put the value at %ld index of the list \n",index, ii);\ printf("%ld out of range, we put the value at %ld index of the list \n",index, ii);\
if(var_list->current_list){\ if(var_list->current_list){\
@@ -187,9 +212,11 @@ GENERATE_LIST_ALL(TYPE_PTR)
list_to_add->index = index++;\ list_to_add->index = index++;\
list_to_add = list_to_add->next;\ list_to_add = list_to_add->next;\
}\ }\
pthread_mutex_unlock(var_list->mut_list);\
}\ }\
void remove_index_from_list_##type(struct main_list_##type *var_list, size_t index ){\ void remove_index_from_list_##type(struct main_list_##type *var_list, size_t index ){\
if( index == move_current_to_index_list_##type(var_list, index)) {\ if( index == move_current_to_index_list_##type(var_list, index)) {\
pthread_mutex_lock(var_list->mut_list);\
struct list_##type * list_tmp_prev = (var_list->current_list)->preview;\ struct list_##type * list_tmp_prev = (var_list->current_list)->preview;\
struct list_##type * list_tmp_next = (var_list->current_list)->next;\ struct list_##type * list_tmp_next = (var_list->current_list)->next;\
if(list_tmp_prev){\ if(list_tmp_prev){\
@@ -203,9 +230,11 @@ GENERATE_LIST_ALL(TYPE_PTR)
list_tmp_next->index = index++;\ list_tmp_next->index = index++;\
list_tmp_next=list_tmp_next->next;\ list_tmp_next=list_tmp_next->next;\
}\ }\
pthread_mutex_unlock(var_list->mut_list);\
}\ }\
}\ }\
void remove_all_list_in_##type(struct main_list_##type *var_list){\ void remove_all_list_in_##type(struct main_list_##type *var_list){\
pthread_mutex_lock(var_list->mut_list);\
struct list_##type *tmp = var_list->begin_list, *prec_tmp;\ struct list_##type *tmp = var_list->begin_list, *prec_tmp;\
while(tmp){\ while(tmp){\
prec_tmp = tmp;\ prec_tmp = tmp;\
@@ -217,6 +246,7 @@ GENERATE_LIST_ALL(TYPE_PTR)
var_list->end_list = NULL;\ var_list->end_list = NULL;\
var_list->size = 0;\ var_list->size = 0;\
var_list->current_index = 0;\ var_list->current_index = 0;\
pthread_mutex_unlock(var_list->mut_list);\
}\ }\
void free_all_var_list_##type(struct main_list_##type *var_list){\ void free_all_var_list_##type(struct main_list_##type *var_list){\
remove_all_list_in_##type(var_list);\ remove_all_list_in_##type(var_list);\
@@ -225,12 +255,16 @@ GENERATE_LIST_ALL(TYPE_PTR)
free(var_list);\ free(var_list);\
}\ }\
void increment_list_##type(struct main_list_##type * var_list){\ void increment_list_##type(struct main_list_##type * var_list){\
pthread_mutex_lock(var_list->mut_list);\
var_list->current_list = (var_list->current_list)->next;\ var_list->current_list = (var_list->current_list)->next;\
++(var_list->current_index);\ ++(var_list->current_index);\
pthread_mutex_unlock(var_list->mut_list);\
}\ }\
void decrement_list_##type(struct main_list_##type * var_list){\ void decrement_list_##type(struct main_list_##type * var_list){\
pthread_mutex_lock(var_list->mut_list);\
var_list->current_list = (var_list->current_list)->preview;\ var_list->current_list = (var_list->current_list)->preview;\
--(var_list->current_index);\ --(var_list->current_index);\
pthread_mutex_unlock(var_list->mut_list);\
}\ }\
struct list_##type * local_increment_list_##type(struct list_##type *list){\ struct list_##type * local_increment_list_##type(struct list_##type *list){\
if(list) return list->next;\ if(list) return list->next;\
@@ -241,16 +275,21 @@ GENERATE_LIST_ALL(TYPE_PTR)
return NULL;\ return NULL;\
}\ }\
struct list_##type * search_first_occ_with_mov_from_curr_in_list_##type(struct main_list_##type *var_list, type value, int (*funcCmp)(type, type), struct list_##type * (*incr_or_decr_mov)(struct list_##type *)){\ struct list_##type * search_first_occ_with_mov_from_curr_in_list_##type(struct main_list_##type *var_list, type value, int (*funcCmp)(type, type), struct list_##type * (*incr_or_decr_mov)(struct list_##type *)){\
pthread_mutex_lock(var_list->mut_list);\
for(struct list_##type *list_cur = var_list->current_list; list_cur; list_cur = incr_or_decr_mov(list_cur)){\ for(struct list_##type *list_cur = var_list->current_list; list_cur; list_cur = incr_or_decr_mov(list_cur)){\
if(0 == funcCmp(value, list_cur->value))\ if(0 == funcCmp(value, list_cur->value)){\
pthread_mutex_unlock(var_list->mut_list);\
return list_cur;\ return list_cur;\
}\
}\ }\
pthread_mutex_unlock(var_list->mut_list);\
return NULL;\ return NULL;\
}\ }\
struct list_##type * search_first_occ_from_begin_in_list_##type(struct main_list_##type *var_list, type value, int (*funcCmp)(type, type)){\ struct list_##type * search_first_occ_from_begin_in_list_##type(struct main_list_##type *var_list, type value, int (*funcCmp)(type, type)){\
return search_first_occ_with_mov_from_curr_in_list_##type(var_list, value, funcCmp, local_increment_list_##type);\ return search_first_occ_with_mov_from_curr_in_list_##type(var_list, value, funcCmp, local_increment_list_##type);\
}\ }\
struct list_##type * pull_end_from_list_##type(struct main_list_##type *var_list){\ struct list_##type * pull_end_from_list_##type(struct main_list_##type *var_list){\
pthread_mutex_lock(var_list->mut_list);\
struct list_##type *ret = var_list->end_list;\ struct list_##type *ret = var_list->end_list;\
if(ret != NULL){\ if(ret != NULL){\
struct list_##type * prevL = ret->preview;\ struct list_##type * prevL = ret->preview;\
@@ -265,9 +304,11 @@ GENERATE_LIST_ALL(TYPE_PTR)
--(var_list->size);\ --(var_list->size);\
ret->preview = NULL;\ ret->preview = NULL;\
}\ }\
pthread_mutex_unlock(var_list->mut_list);\
return ret;\ return ret;\
}\ }\
struct list_##type * pull_begin_from_list_##type(struct main_list_##type *var_list){\ struct list_##type * pull_begin_from_list_##type(struct main_list_##type *var_list){\
pthread_mutex_lock(var_list->mut_list);\
struct list_##type *ret = var_list->begin_list;\ struct list_##type *ret = var_list->begin_list;\
if(ret != NULL){\ if(ret != NULL){\
struct list_##type * nextL = ret->next;\ struct list_##type * nextL = ret->next;\
@@ -282,9 +323,14 @@ GENERATE_LIST_ALL(TYPE_PTR)
--(var_list->size);\ --(var_list->size);\
ret->next = NULL;\ ret->next = NULL;\
}\ }\
struct list_##type *tmp = var_list->begin_list;\
while(tmp){ --(tmp->index); tmp=tmp->next;}\
pthread_mutex_unlock(var_list->mut_list);\
return ret;\ return ret;\
}\ }\
void append_list_##type(struct main_list_##type *var_list, struct list_##type *list){\ void append_list_##type(struct main_list_##type *var_list, struct list_##type *list){\
pthread_mutex_lock(var_list->mut_list);\
list->index = var_list->size;\
if(var_list->end_list == NULL){\ if(var_list->end_list == NULL){\
list->preview = NULL;\ list->preview = NULL;\
var_list->end_list = list;\ var_list->end_list = list;\
@@ -297,6 +343,7 @@ GENERATE_LIST_ALL(TYPE_PTR)
var_list->end_list = list;\ var_list->end_list = list;\
}\ }\
++(var_list->size);\ ++(var_list->size);\
pthread_mutex_unlock(var_list->mut_list);\
}\ }\