Skip to content

Commit

Permalink
fix in glthread library
Browse files Browse the repository at this point in the history
  • Loading branch information
sachinites committed Oct 26, 2020
1 parent 7f769ac commit a58a8bb
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 30 deletions.
67 changes: 38 additions & 29 deletions gluethread/glthread.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,46 +98,46 @@ remove_glthread(glthread_t *curr_glthread){
}

void
delete_glthread_list(glthread_t *base_glthread){
delete_glthread_list(glthread_t *glthread_head){

glthread_t *glthreadptr = NULL;

ITERATE_GLTHREAD_BEGIN(base_glthread, glthreadptr){
ITERATE_GLTHREAD_BEGIN(glthread_head, glthreadptr){
remove_glthread(glthreadptr);
} ITERATE_GLTHREAD_END(base_glthread, glthreadptr);
} ITERATE_GLTHREAD_END(glthread_head, glthreadptr);
}

void
glthread_add_last(glthread_t *base_glthread, glthread_t *new_glthread){
glthread_add_last(glthread_t *glthread_head, glthread_t *new_glthread){

glthread_t *glthreadptr = NULL,
*prevglthreadptr = NULL;

ITERATE_GLTHREAD_BEGIN(base_glthread, glthreadptr){
ITERATE_GLTHREAD_BEGIN(glthread_head, glthreadptr){
prevglthreadptr = glthreadptr;
} ITERATE_GLTHREAD_END(base_glthread, glthreadptr);
} ITERATE_GLTHREAD_END(glthread_head, glthreadptr);

if(prevglthreadptr)
glthread_add_next(prevglthreadptr, new_glthread);
else
glthread_add_next(base_glthread, new_glthread);
glthread_add_next(glthread_head, new_glthread);
}

unsigned int
get_glthread_list_count(glthread_t *base_glthread){
get_glthread_list_count(glthread_t *glthread_head){

unsigned int count = 0;
glthread_t *glthreadptr = NULL;

ITERATE_GLTHREAD_BEGIN(base_glthread, glthreadptr){
ITERATE_GLTHREAD_BEGIN(glthread_head, glthreadptr){
count++;
} ITERATE_GLTHREAD_END(base_glthread, glthreadptr);
} ITERATE_GLTHREAD_END(glthread_head, glthreadptr);
return count;
}


void
glthread_priority_insert(glthread_t *base_glthread,
glthread_priority_insert(glthread_t *glthread_head,
glthread_t *glthread,
int (*comp_fn)(void *, void *),
int offset){
Expand All @@ -148,49 +148,58 @@ glthread_priority_insert(glthread_t *base_glthread,

init_glthread(glthread);

if(IS_GLTHREAD_LIST_EMPTY(base_glthread)){
glthread_add_next(base_glthread, glthread);
if(IS_GLTHREAD_LIST_EMPTY(glthread_head)){
glthread_add_next(glthread_head, glthread);
return;
}

/* Only one node*/
if(base_glthread->right && !base_glthread->right->right){
if(comp_fn(GLTHREAD_GET_USER_DATA_FROM_OFFSET(base_glthread->right, offset),
GLTHREAD_GET_USER_DATA_FROM_OFFSET(glthread, offset)) == -1){
glthread_add_next(base_glthread->right, glthread);
if(glthread_head->right && !glthread_head->right->right){
if(comp_fn(GLTHREAD_GET_USER_DATA_FROM_OFFSET(glthread, offset),
GLTHREAD_GET_USER_DATA_FROM_OFFSET(glthread_head->right, offset)) == -1){
glthread_add_next(glthread_head, glthread);
}
else{
glthread_add_next(base_glthread, glthread);
glthread_add_next(glthread_head->right, glthread);
}
return;
}

if(comp_fn(GLTHREAD_GET_USER_DATA_FROM_OFFSET(glthread, offset),
GLTHREAD_GET_USER_DATA_FROM_OFFSET(base_glthread->right, offset)) == -1){
glthread_add_next(base_glthread, glthread);
return;
}

ITERATE_GLTHREAD_BEGIN(base_glthread, curr){
ITERATE_GLTHREAD_BEGIN(glthread_head, curr){

if(comp_fn(GLTHREAD_GET_USER_DATA_FROM_OFFSET(glthread, offset),
GLTHREAD_GET_USER_DATA_FROM_OFFSET(curr, offset)) != -1){
prev = curr;
continue;
}

glthread_add_next(curr, glthread);
return;
if(!prev)
glthread_add_next(glthread_head, glthread);
else
glthread_add_next(prev, glthread);

}ITERATE_GLTHREAD_END(base_glthread, curr);
return;

}ITERATE_GLTHREAD_END(glthread_head, curr);

/*Add in the end*/
glthread_add_next(prev, glthread);
}

glthread_t *
dequeue_glthread_first(glthread_t *base_glthread){

glthread_t *temp;
if(!base_glthread->right)
return NULL;
temp = base_glthread->right;
remove_glthread(temp);
return temp;
}

#if 0
void *
gl_thread_search(glthread_t *base_glthread,
gl_thread_search(glthread_t *glthread_head,
void *(*thread_to_struct_fn)(glthread_t *),
void *key,
int (*comparison_fn)(void *, void *)){
Expand Down
4 changes: 3 additions & 1 deletion gluethread/glthread.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ glthread_add_last(glthread_t *base_glthread, glthread_t *new_glthread);
#define IS_GLTHREAD_LIST_EMPTY(glthreadptr) \
((glthreadptr)->right == 0 && (glthreadptr)->left == 0)

#define GLTHREAD_TO_STRUCT(fn_name, structure_name, field_name, glthreadptr) \
#define GLTHREAD_TO_STRUCT(fn_name, structure_name, field_name) \
static inline structure_name * fn_name(glthread_t *glthreadptr){ \
return (structure_name *)((char *)(glthreadptr) - (char *)&(((structure_name *)0)->field_name)); \
}
Expand Down Expand Up @@ -92,6 +92,8 @@ glthread_priority_insert(glthread_t *base_glthread,
int (*comp_fn)(void *, void *),
int offset);

glthread_t *
dequeue_glthread_first(glthread_t *base_glthread);

#if 0
void *
Expand Down

0 comments on commit a58a8bb

Please sign in to comment.