Ich stecke bei einem Segmentierungsfehler fest, nachdem ich ungefähr 8 Millionen Datensätze in eine TC Hash Datenbank eingefügt habe. Nach allem, was eingeführt wird, schließe ich die DB aber ich fing einen Segmentation Fault in diesem Teil der Codes (tchdb.c):TokyoCabinet: Segmentierungsfehler bei 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;
}
Mehr Eigen an der kommentierten Zeile.
Die DB wurde wie folgt geöffnet:
tchdbtune(hdb, 25000000, -1, -1, HDBTLARGE);
tchdbsetcache(hdb, 100000);
Die .tch Datei über 2 GB ist (2147483647 Byte):
tchdbopen(hdb, db_file, HDBOWRITER | HDBOCREAT))
Die DB mit tunned wird. Das Interessante ist, dass es nur passiert, wenn ich ungefähr 8 Millionen Datensätze einfüge. Mit 2 oder 3 Millionen schließt die DB in Ordnung. Das Einfügen von 8 Millionen Datensätzen dauert etwa 3 Stunden, da ich Daten aus Textdateien lese.
Irgendwelche Ideen?
Danke