int main() { stxxl::config* config = stxxl::config::get_instance(); stxxl::disk_config disk1("/tmp/stxxl-###.tmp", 16 * 1024 * 1024, "syscall autogrow=no"); disk1.unlink_on_open = true; disk1.direct = stxxl::disk_config::DIRECT_OFF; config->add_disk(disk1); vector_type* vector = new vector_type(); try { while (true) vector->push_back(0); } catch (std::exception& e) { STXXL_ERRMSG("Caught exception: " << e.what()); delete vector; // here it will crash in block_manager::delete_block(bid) } STXXL_MSG("Delete done, all is well."); return 0; }
int fileSysTest() { Vdisk disk1("filesys1", 100, 500); FileSys fsys("filesys1"); fsys.makeFile("file1"); fsys.makeFile("file2"); std::string bfile; for (int i = 1; i <= 1500; ++i) { bfile += "1"; } std::vector<std::string> blocks = block(bfile, 500); int blocknumber = 0; for (unsigned int i = 0; i < blocks.size(); ++i) { blocknumber = fsys.addBlock("file1", blocks[i]); } fsys.deleteBlock("file1", fsys.getFirstBlock("file1")); for (unsigned int i = 1; i <= 2000; ++i) { bfile += "2"; } for (unsigned int i = 0; i < blocks.size(); ++i) { blocknumber = fsys.addBlock("file2", blocks[i]); } fsys.deleteBlock("file2", blocknumber); return 1; }