Je suis bloqué à une erreur de segmentation après avoir inséré environ 8 millions d'enregistrements dans une base de données TC Hash. Après tout est inséré je ferme la DB, mais j'ai attrapé une erreur de segmentation dans cette partie du code (tchdb.c):TokyoCabinet: Erreur de segmentation à hdb-> close()
static void tchdbsetflag(TCHDB *hdb, int flag, bool sign){
assert(hdb);
char *fp = (char *)hdb->map + HDBFLAGSOFF;
if(sign){
*fp |= (uint8_t)flag; //SEGFAULT HERE!
} else {
*fp &= ~(uint8_t)flag;
}
hdb->flags = *fp;
}
Plus especifically à la ligne commentée.
La DB a été ouvert comme ceci:
tchdbopen(hdb, db_file, HDBOWRITER | HDBOCREAT))
La DB est tunned avec:
tchdbtune(hdb, 25000000, -1, -1, HDBTLARGE);
tchdbsetcache(hdb, 100000);
Le fichier .TCH est d'environ 2 Go (2147483647 octets). Ce qui est intéressant, c'est que cela ne se passe que lorsque j'insère environ 8 millions d'enregistrements. Avec 2 ou 3 millions, la DB se ferme bien. L'insertion de 8 millions d'enregistrements prend environ 3 heures parce que j'ai lu des données à partir de fichiers texte.
Des idées?
Merci