github.com/afumu/libc@v0.0.6/musl/src/exit/at_quick_exit.c (about)

     1  #include <stdlib.h>
     2  #include "libc.h"
     3  #include "lock.h"
     4  
     5  #define COUNT 32
     6  
     7  static void (*funcs[COUNT])(void);
     8  static int count;
     9  static volatile int lock[1];
    10  
    11  void __funcs_on_quick_exit()
    12  {
    13  	void (*func)(void);
    14  	LOCK(lock);
    15  	while (count > 0) {
    16  		func = funcs[--count];
    17  		UNLOCK(lock);
    18  		func();
    19  		LOCK(lock);
    20  	}
    21  }
    22  
    23  int at_quick_exit(void (*func)(void))
    24  {
    25  	int r = 0;
    26  	LOCK(lock);
    27  	if (count == 32) r = -1;
    28  	else funcs[count++] = func;
    29  	UNLOCK(lock);
    30  	return r;
    31  }