version 1.15, 2010/05/05 21:20:37
|
version 1.17, 2010/05/16 19:36:20
|
Line 877 liberation(struct_processus *s_etat_proc
|
Line 877 liberation(struct_processus *s_etat_proc
|
{ |
{ |
if (decrementation_atomique(s_objet) > 0) |
if (decrementation_atomique(s_objet) > 0) |
{ |
{ |
|
liberation(s_etat_processus, (*((struct_fichier *) |
|
(*s_objet).objet)).format); |
return; |
return; |
} |
} |
|
|
Line 1208 liberation(struct_processus *s_etat_proc
|
Line 1210 liberation(struct_processus *s_etat_proc
|
{ |
{ |
if (decrementation_atomique(s_objet) > 0) |
if (decrementation_atomique(s_objet) > 0) |
{ |
{ |
|
liberation(s_etat_processus, (*((struct_socket *) |
|
(*s_objet).objet)).format); |
return; |
return; |
} |
} |
|
|
Line 1749 copie_objet(struct_processus *s_etat_pro
|
Line 1753 copie_objet(struct_processus *s_etat_pro
|
if (type == 'P') |
if (type == 'P') |
{ |
{ |
incrementation_atomique(s_objet); |
incrementation_atomique(s_objet); |
|
|
|
if (((*((struct_fichier *) ((*s_objet).objet))).format = |
|
copie_objet(s_etat_processus, (*((struct_fichier *) |
|
((*s_objet).objet))).format, 'P')) == NULL) |
|
{ |
|
return(NULL); |
|
} |
|
|
return(s_objet); |
return(s_objet); |
} |
} |
|
|
Line 2265 copie_objet(struct_processus *s_etat_pro
|
Line 2277 copie_objet(struct_processus *s_etat_pro
|
if (type == 'P') |
if (type == 'P') |
{ |
{ |
incrementation_atomique(s_objet); |
incrementation_atomique(s_objet); |
|
|
|
if (((*((struct_socket *) ((*s_nouvel_objet).objet))).format = |
|
copie_objet(s_etat_processus, (*((struct_socket *) |
|
((*s_objet).objet))).format, 'P')) == NULL) |
|
{ |
|
return(NULL); |
|
} |
|
|
return(s_objet); |
return(s_objet); |
} |
} |
|
|
Line 3535 copie_etat_processus(struct_processus *s
|
Line 3555 copie_etat_processus(struct_processus *s
|
|
|
#undef fprintf |
#undef fprintf |
|
|
|
#ifdef __BACKTRACE |
#define return(a) { if (a == NULL) \ |
#define return(a) { if (a == NULL) \ |
{ BACKTRACE(20); fprintf(stderr, ">>> MEDITATION %d\n", __LINE__); } \ |
{ BACKTRACE(20); fprintf(stderr, ">>> MEDITATION %d\n", __LINE__); } \ |
return(a); } while(0) |
return(a); } while(0) |
|
#define PROFONDEUR_PILE 64 |
|
#endif |
|
|
typedef struct memoire |
typedef struct memoire |
{ |
{ |
Line 3547 typedef struct memoire
|
Line 3570 typedef struct memoire
|
unsigned long ligne; |
unsigned long ligne; |
size_t taille; |
size_t taille; |
unsigned long long ordre; |
unsigned long long ordre; |
|
# ifdef __BACKTRACE |
|
void *pile[PROFONDEUR_PILE]; |
|
int profondeur; |
|
# endif |
struct memoire *suivant; |
struct memoire *suivant; |
} struct_memoire; |
} struct_memoire; |
|
|
Line 3555 static unsigned long long ordre = 0;
|
Line 3582 static unsigned long long ordre = 0;
|
static pthread_mutex_t mutex_allocation = PTHREAD_MUTEX_INITIALIZER; |
static pthread_mutex_t mutex_allocation = PTHREAD_MUTEX_INITIALIZER; |
|
|
#define check(a, b) ((strcmp(#a, fonction) == 0) && (ligne == b)) |
#define check(a, b) ((strcmp(#a, fonction) == 0) && (ligne == b)) |
|
#define CORE_DUMP |
|
|
void * |
void * |
debug_memoire_ajout(size_t taille, const unsigned char *fonction, |
debug_memoire_ajout(size_t taille, const unsigned char *fonction, |
Line 3583 debug_memoire_ajout(size_t taille, const
|
Line 3611 debug_memoire_ajout(size_t taille, const
|
(*debug).taille = taille; |
(*debug).taille = taille; |
(*debug).ordre = ordre; |
(*debug).ordre = ordre; |
|
|
|
# ifdef __BACKTRACE |
|
(*debug).profondeur = backtrace((*debug).pile, PROFONDEUR_PILE); |
|
# endif |
|
|
pthread_mutex_unlock(&mutex_allocation); |
pthread_mutex_unlock(&mutex_allocation); |
|
|
if (((*debug).fonction = malloc((strlen(fonction) + 1) * |
if (((*debug).fonction = malloc((strlen(fonction) + 1) * |
Line 3726 debug_memoire_retrait(void *pointeur)
|
Line 3758 debug_memoire_retrait(void *pointeur)
|
} |
} |
|
|
void |
void |
debug_memoire_verification(struct_processus *s_etat_processus) |
debug_memoire_verification() |
{ |
{ |
|
# ifdef __BACKTRACE |
|
char **appels; |
|
|
|
int j; |
|
# endif |
|
|
integer8 i; |
integer8 i; |
|
|
struct_memoire *element_courant; |
struct_memoire *element_courant; |
struct_memoire *element_suivant; |
struct_memoire *element_suivant; |
|
|
fprintf(stderr, "[%d-%llu] MEMORY LEAK\n", |
fprintf(stderr, "[%d-%llu] LIST OF MEMORY LEAKS\n", |
getpid(), (unsigned long long) pthread_self()); |
getpid(), (unsigned long long) pthread_self()); |
|
|
pthread_mutex_lock(&mutex_allocation); |
pthread_mutex_lock(&mutex_allocation); |
Line 3755 debug_memoire_verification(struct_proces
|
Line 3793 debug_memoire_verification(struct_proces
|
(unsigned long long) pthread_self(), |
(unsigned long long) pthread_self(), |
(*element_courant).argument); |
(*element_courant).argument); |
|
|
switch(i) |
# ifdef __BACKTRACE |
|
appels = backtrace_symbols((*element_courant).pile, |
|
(*element_courant).profondeur); |
|
|
|
fprintf(stderr, "[%d-%llu] BACKTRACE\n", |
|
getpid(), (unsigned long long) pthread_self()); |
|
|
|
if (appels != NULL) |
{ |
{ |
// Affichage des méditations |
for(j = 0; j < (*element_courant).profondeur; j++) |
case 1: |
|
{ |
{ |
break; |
fprintf(stderr, "[%d-%llu] %s\n", getpid(), |
|
(unsigned long long) pthread_self(), appels[j]); |
} |
} |
|
|
|
free(appels); |
} |
} |
|
# endif |
|
|
|
fprintf(stderr, "\n"); |
|
|
i++; |
i++; |
|
|
element_suivant = (*element_courant).suivant; |
element_suivant = (*element_courant).suivant; |
|
|
|
# ifndef CORE_DUMP |
free((*element_courant).fonction); |
free((*element_courant).fonction); |
free((*element_courant).argument); |
free((*element_courant).argument); |
free(element_courant); |
free(element_courant); |
|
# endif |
|
|
element_courant = element_suivant; |
element_courant = element_suivant; |
} |
} |
|
|
Line 3780 debug_memoire_verification(struct_proces
|
Line 3834 debug_memoire_verification(struct_proces
|
|
|
return; |
return; |
} |
} |
|
|
|
void |
|
analyse_post_mortem() |
|
{ |
|
# ifdef CORE_DUMP |
|
BUG(debug != NULL, uprintf("[%d-%llu] CREATE CORE DUMP FILE FOR " |
|
"POST MORTEM ANALYZE\n", getpid(), |
|
(unsigned long long) pthread_self())); |
|
# endif |
|
|
|
return; |
|
} |
|
|
#endif |
#endif |
|
|