mirror of https://github.com/aria2/aria2
2010-10-23 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed the bug that dht.dat file could not be saved. This is because a directory denoting temporary file path is wrongly created and thus aria2 fails to open the file as regular file. * src/DHTAutoSaveCommand.ccpull/1/head
parent
379ab7dd09
commit
831bac1471
|
@ -1,3 +1,10 @@
|
||||||
|
2010-10-23 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Fixed the bug that dht.dat file could not be saved. This is
|
||||||
|
because a directory denoting temporary file path is wrongly
|
||||||
|
created and thus aria2 fails to open the file as regular file.
|
||||||
|
* src/DHTAutoSaveCommand.cc
|
||||||
|
|
||||||
2010-10-22 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2010-10-22 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Enclosed dht.dat path with single quote.
|
Enclosed dht.dat path with single quote.
|
||||||
|
|
|
@ -89,9 +89,13 @@ void DHTAutoSaveCommand::save()
|
||||||
get(family_ == AF_INET? PREF_DHT_FILE_PATH : PREF_DHT_FILE_PATH6);
|
get(family_ == AF_INET? PREF_DHT_FILE_PATH : PREF_DHT_FILE_PATH6);
|
||||||
getLogger()->info("Saving DHT routing table to %s.", dhtFile.c_str());
|
getLogger()->info("Saving DHT routing table to %s.", dhtFile.c_str());
|
||||||
|
|
||||||
std::string tempFile = dhtFile;
|
File tempFile(dhtFile+"__temp");
|
||||||
tempFile += "__temp";
|
// Removing tempFile is unnecessary because the file is truncated on
|
||||||
File(tempFile).mkdirs();
|
// open. But the bug in 1.10.4 creates directory for this path.
|
||||||
|
// Because it is directory, opening directory as file fails. So we
|
||||||
|
// first remove it here.
|
||||||
|
tempFile.remove();
|
||||||
|
File(tempFile.getDirname()).mkdirs();
|
||||||
std::vector<SharedHandle<DHTNode> > nodes;
|
std::vector<SharedHandle<DHTNode> > nodes;
|
||||||
std::vector<SharedHandle<DHTBucket> > buckets;
|
std::vector<SharedHandle<DHTBucket> > buckets;
|
||||||
routingTable_->getBuckets(buckets);
|
routingTable_->getBuckets(buckets);
|
||||||
|
@ -109,7 +113,8 @@ void DHTAutoSaveCommand::save()
|
||||||
|
|
||||||
try {
|
try {
|
||||||
{
|
{
|
||||||
std::ofstream o(tempFile.c_str(), std::ios::out|std::ios::binary);
|
std::ofstream o(tempFile.getPath().c_str(),
|
||||||
|
std::ios::out|std::ios::binary);
|
||||||
if(!o) {
|
if(!o) {
|
||||||
throw DL_ABORT_EX
|
throw DL_ABORT_EX
|
||||||
(StringFormat("Failed to save DHT routing table to %s. cause:%s",
|
(StringFormat("Failed to save DHT routing table to %s. cause:%s",
|
||||||
|
@ -117,9 +122,9 @@ void DHTAutoSaveCommand::save()
|
||||||
}
|
}
|
||||||
serializer.serialize(o);
|
serializer.serialize(o);
|
||||||
}
|
}
|
||||||
if(!File(tempFile).renameTo(dhtFile)) {
|
if(!tempFile.renameTo(dhtFile)) {
|
||||||
getLogger()->error("Cannot move file from %s to %s.",
|
getLogger()->error("Cannot move file from %s to %s.",
|
||||||
tempFile.c_str(), dhtFile.c_str());
|
tempFile.getPath().c_str(), dhtFile.c_str());
|
||||||
}
|
}
|
||||||
} catch(RecoverableException& e) {
|
} catch(RecoverableException& e) {
|
||||||
getLogger()->error("Exception caught while saving DHT routing table to %s",
|
getLogger()->error("Exception caught while saving DHT routing table to %s",
|
||||||
|
|
Loading…
Reference in New Issue