Fixed the bug that causes segmentation fault when unpause RequestGroup

which has resolved BtDependency.
pull/1/head
Tatsuhiro Tsujikawa 2011-02-14 00:36:52 +09:00
parent eb6a811279
commit a21fb350a0
2 changed files with 12 additions and 0 deletions

View File

@ -76,6 +76,9 @@ void copyValues(const SharedHandle<FileEntry>& d,
bool BtDependency::resolve()
{
if(!dependee_) {
return true;
}
if(dependee_->getNumCommand() == 0 && dependee_->downloadFinished()) {
SharedHandle<RequestGroup> dependee = dependee_;
// cut reference here

View File

@ -25,6 +25,7 @@ class BtDependencyTest:public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(BtDependencyTest);
CPPUNIT_TEST(testResolve);
CPPUNIT_TEST(testResolve_nullDependee);
CPPUNIT_TEST(testResolve_originalNameNoMatch);
CPPUNIT_TEST(testResolve_singleFileWithoutOriginalName);
CPPUNIT_TEST(testResolve_multiFile);
@ -71,6 +72,7 @@ public:
}
void testResolve();
void testResolve_nullDependee();
void testResolve_originalNameNoMatch();
void testResolve_singleFileWithoutOriginalName();
void testResolve_multiFile();
@ -106,6 +108,13 @@ void BtDependencyTest::testResolve()
CPPUNIT_ASSERT(firstFileEntry->isRequested());
}
void BtDependencyTest::testResolve_nullDependee()
{
SharedHandle<RequestGroup> dependant = createDependant(option_);
BtDependency dep(dependant.get(), SharedHandle<RequestGroup>());
CPPUNIT_ASSERT(dep.resolve());
}
void BtDependencyTest::testResolve_originalNameNoMatch()
{
std::string filename = A2_TEST_DIR"/single.torrent";