Buongiorno
Ho un problema un po strano con un logger che ho sviluppato un po di tempo fa. Il funzionamento è molto semplice:
codice:
void LOG(int level,char *fmt, ...)
La funzione prende un intero che rappresenta il livello dell'informazione da loggare (errore,warning,info,eccetera) ed una stringa di formato che poi viene passata ad una fprintf.
Il codice è addirittura banale
codice:
if (level<=LOG_LEVEL)
{
time_t now;
char * ctime_str;
char * str_date;
va_list args;
char buf[1024];
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
OutputDebugString(buf);
str_date = (char *)malloc(128*sizeof(char));
now = time(NULL);
ctime_str = ctime(&now);
strncpy(str_date,ctime_str,strlen(ctime_str)-1);
str_date[strlen(ctime_str)-1] = '\0';
fprintf(log_file, "[%s][%s]: %s",str_date,LOGLBL[level], buf);
fflush(log_file);
#ifdef _DEBUG_LOGV
fprintf(stderr, "[%s][%s]: %s",str_date,LOGLBL[level], buf);
fflush(stderr);
#endif
free(str_date);
}
Questo è praticamente tutto il codice della funzione. Ora che succede: se imposto un livello di logging alto vengono scritte molte informazioni, perchè il programma che integra il logger stesso è invocato continuamente.
Il problema: nonostante il flush del buffer vedo la memoria occupata dall'applicazione salire costantemente fino, nel caso limite, a sforare la quantità di memoria virtuale della macchina. Se imposto un livello di logging basso o addirittura disabilito il logger la memoria occupata resta stazionaria perciò sono sicuro che dipende da questo.
Ci deve essere qualche buffer che si riempie ma non so dove...il tutto gira su winXP.
Grazie dell'attenzione