Skip to content

Commit e6d6009

Browse files
Implement error callback pop
1 parent be865da commit e6d6009

File tree

4 files changed

+22
-1
lines changed

4 files changed

+22
-1
lines changed

include/fenix.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ extern "C" {
6969
#define FENIX_SUCCESS 0
7070
#define FENIX_ERROR_UNINITIALIZED -9
7171
#define FENIX_ERROR_NOCATEGORY -10
72-
#define FENIX_ERROR_CALLBACK_NOT_REGISTERD -11
72+
#define FENIX_ERROR_CALLBACK_NOT_REGISTERED -11
7373
#define FENIX_ERROR_GROUP_CREATE -12
7474
#define FENIX_ERROR_MEMBER_CREATE -13
7575
#define FENIX_ERROR_COMMIT_BARRIER -133
@@ -142,6 +142,8 @@ int Fenix_Initialized(int *);
142142
int Fenix_Callback_register(void (*recover)(MPI_Comm, int, void *),
143143
void *callback_data);
144144

145+
int Fenix_Callback_pop();
146+
145147
int Fenix_get_number_of_ranks_with_role(int, int *);
146148

147149
int Fenix_get_role(MPI_Comm comm, int rank, int *role);

include/fenix_process_recovery.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ int __fenix_repair_ranks();
100100

101101
int __fenix_callback_register(void (*recover)(MPI_Comm, int, void *), void *);
102102

103+
int __fenix_callback_pop();
104+
103105
void __fenix_callback_push(fenix_callback_list_t **, fenix_callback_func *);
104106

105107
void __fenix_callback_invoke_all(int error);

src/fenix.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ int Fenix_Callback_register(void (*recover)(MPI_Comm, int, void *), void *callba
6767
return __fenix_callback_register(recover, callback_data);
6868
}
6969

70+
int Fenix_Callback_pop() {
71+
return __fenix_callback_pop();
72+
}
73+
7074
int Fenix_Initialized(int *flag) {
7175
*flag = (fenix.fenix_init_flag) ? 1 : 0;
7276
return FENIX_SUCCESS;

src/fenix_callbacks.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,19 @@ int __fenix_callback_register(void (*recover)(MPI_Comm, int, void *), void *call
8080
return error_code;
8181
}
8282

83+
int __fenix_callback_pop(){
84+
if(!fenix.fenix_init_flag) return FENIX_ERROR_UNINITIALIZED;
85+
if(fenix.callback_list == NULL) return FENIX_ERROR_CALLBACK_NOT_REGISTERED;
86+
87+
fenix_callback_list_t* old_head = fenix.callback_list;
88+
fenix.callback_list = old_head->next;
89+
90+
free(old_head->callback);
91+
free(old_head);
92+
93+
return FENIX_SUCCESS;
94+
}
95+
8396
void __fenix_callback_invoke_all(int error)
8497
{
8598
fenix_callback_list_t *current = fenix.callback_list;

0 commit comments

Comments
 (0)