Index: ../ircu2.10.06/include/s_bdd.h =================================================================== RCS file: /cvsroot/ircd/include/s_bdd.h,v retrieving revision 1.6 retrieving revision 1.7 diff -c -r1.6 -r1.7 *** ../ircu2.10.06/include/s_bdd.h 1999/10/27 12:02:38 1.6 --- ../ircu2.10.06/include/s_bdd.h 1999/10/27 12:38:36 1.7 *************** *** 59,66 **** char *destino; char *clave; char *valor; ! char borrado; ! struct dbh_reg *next, *prev; }; #endif /* DB_ESNET || DB_HISPANO */ --- 59,65 ---- char *destino; char *clave; char *valor; ! struct dbh_reg *next; }; #endif /* DB_ESNET || DB_HISPANO */ Index: ../ircu2.10.06/ircd/s_bdd.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_bdd.c,v retrieving revision 1.10 retrieving revision 1.11 diff -c -r1.10 -r1.11 *** ../ircu2.10.06/ircd/s_bdd.c 1999/10/27 12:02:38 1.10 --- ../ircu2.10.06/ircd/s_bdd.c 1999/10/27 12:38:36 1.11 *************** *** 122,163 **** } /* - * dbh_eliminar_borrados (tabla) - * - * libera (free) todos los registros con marca 'borrados' de memoria. - * 1999/06/21 savage@apostols.org - */ - void dbh_eliminar_borrados(char tabla) - { - FILE *f; - struct dbh_reg *reg; - int i; - - tabla_cuantos[tabla] = 0; - - for (i = 0; i < DBH_HASH_SIZE; i++) - for (reg = tabla_datos[tabla][i]; reg != NULL; reg = reg->next) - if (reg->borrado) - { - if (reg->prev) - reg->prev->next = reg->next; - else - tabla_datos[tabla][i] = reg->next; /* era el primero */ - if (reg->next) - reg->next->prev = reg->prev; - if (reg->clave) - RunFree(reg->clave); - if (reg->valor) - RunFree(reg->valor); - RunFree(reg); - } - else - tabla_cuantos[tabla]++; - - return; - } - - /* * dbh_eliminar_registro (tabla, clave) * * libera (free) un registro de memoria. --- 122,127 ---- *************** *** 165,171 **** */ void dbh_eliminar_registro(char tabla, char *clave) { ! struct dbh_reg *reg; int hashi, i = 0; char *c; --- 129,135 ---- */ void dbh_eliminar_registro(char tabla, char *clave) { ! struct dbh_reg *reg, *reg2, **reg3; int hashi, i = 0; char *c; *************** *** 182,201 **** hashi = dbh_hash_registro(c); ! for (reg = tabla_datos[tabla][hashi]; reg != NULL; reg = reg->next) if (!strcmp(reg->clave, c)) { ! /* ! sendto_ops("Elimino T='%c' C='%s' H=%u",tabla, reg->clave, hashi ); ! */ ! if (reg->prev) ! reg->prev->next = reg->next; ! else ! tabla_datos[tabla][hashi] = reg->next; /* era el primero */ ! ! if (reg->next) ! reg->next->prev = reg->prev; if (reg->clave) RunFree(reg->clave); if (reg->valor) --- 146,162 ---- hashi = dbh_hash_registro(c); ! reg3 = &tabla_datos[tabla][hashi]; ! ! for (reg = *reg3; reg != NULL; reg = reg2) ! { ! reg2 = reg->next; if (!strcmp(reg->clave, c)) { ! *reg3 = reg2; + if (reg->destino) + RunFree(reg->destino); if (reg->clave) RunFree(reg->clave); if (reg->valor) *************** *** 204,213 **** tabla_cuantos[tabla]--; break; } RunFree(c); - - return; } /* --- 165,174 ---- tabla_cuantos[tabla]--; break; } + reg3 = &(reg->next); + } RunFree(c); } /* *************** *** 218,224 **** */ void dbh_insertar_registro(char tabla, char *destino, char *clave, char *valor) { ! struct dbh_reg *reg, *rh; int hashi; char *c, *v, *d; aClient *acptr; --- 179,185 ---- */ void dbh_insertar_registro(char tabla, char *destino, char *clave, char *valor) { ! struct dbh_reg *reg; int hashi; char *c, *v, *d; aClient *acptr; *************** *** 268,275 **** reg->clave = c; reg->valor = v; reg->destino = d; ! reg->next = reg->prev = NULL; ! reg->borrado = 0; /* busco hash */ hashi = dbh_hash_registro(reg->clave); --- 229,235 ---- reg->clave = c; reg->valor = v; reg->destino = d; ! reg->next = NULL; /* busco hash */ hashi = dbh_hash_registro(reg->clave); *************** *** 278,292 **** sendto_ops("Inserto T='%c' C='%s' H=%u",tabla, reg->clave, hashi ); */ ! rh = tabla_datos[tabla][hashi]; tabla_datos[tabla][hashi] = reg; - reg->next = rh; - if (rh) - rh->prev = reg; tabla_cuantos[tabla]++; - - return; } /* --- 238,247 ---- sendto_ops("Inserto T='%c' C='%s' H=%u",tabla, reg->clave, hashi ); */ ! reg->next = tabla_datos[tabla][hashi]; tabla_datos[tabla][hashi] = reg; tabla_cuantos[tabla]++; } /* *************** *** 768,782 **** void borrar_db(char que_bdd) { int i; ! struct dbh_reg *reg; for (i = 0; i < DBH_HASH_SIZE; i++) ! for (reg = tabla_datos[que_bdd][i]; reg != NULL; reg = reg->next) ! reg->borrado = 1; ! /* ! ** Evita Memory Leak ! */ ! dbh_eliminar_borrados(que_bdd); /* Error introducido en DBH ** BUGFIX! --- 723,745 ---- void borrar_db(char que_bdd) { int i; ! struct dbh_reg *reg, *reg2; for (i = 0; i < DBH_HASH_SIZE; i++) ! { ! for (reg = tabla_datos[que_bdd][i]; reg != NULL; reg = reg2) ! { ! reg2 = reg->next; ! if (reg->destino) ! RunFree(reg->destino); ! if (reg->clave) ! RunFree(reg->clave); ! if (reg->valor) ! RunFree(reg->valor); ! RunFree(reg); ! } ! tabla_datos[que_bdd][i] = NULL; ! } /* Error introducido en DBH ** BUGFIX! Index: ../ircu2.10.06/ircd/s_debug.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_debug.c,v retrieving revision 1.71 retrieving revision 1.72 diff -c -r1.71 -r1.72 *** ../ircu2.10.06/ircd/s_debug.c 1999/10/27 12:02:38 1.71 --- ../ircu2.10.06/ircd/s_debug.c 1999/10/27 12:38:37 1.72 *************** *** 191,197 **** '-', #endif #endif ! 'D','B','4','7', #ifdef DB_ESNET '+', #else --- 191,197 ---- '-', #endif #endif ! 'D','B','4','8', #ifdef DB_ESNET '+', #else