Fixed a potential memory leak. If any operation prior to the addition of the job queue to the manager failed, it wouldn't be deleted. Now the job generator deletes it by default and must be told via DetachJobQueue() to not do that.

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4222 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2003-08-03 18:37:21 +00:00
parent f31cbc2db6
commit 13ab290504
3 changed files with 15 additions and 1 deletions
@@ -45,6 +45,7 @@ KDiskDeviceJobGenerator::~KDiskDeviceJobGenerator()
{ {
delete[] fMoveInfos; delete[] fMoveInfos;
delete[] fPartitionIDs; delete[] fPartitionIDs;
delete fJobQueue;
} }
// JobFactory // JobFactory
@@ -68,6 +69,15 @@ KDiskDeviceJobGenerator::JobQueue() const
return fJobQueue; return fJobQueue;
} }
// DetachJobQueue
KDiskDeviceJobQueue *
KDiskDeviceJobGenerator::DetachJobQueue()
{
KDiskDeviceJobQueue *jobQueue = fJobQueue;
fJobQueue = NULL;
return jobQueue;
}
// GenerateJobs // GenerateJobs
status_t status_t
KDiskDeviceJobGenerator::GenerateJobs() KDiskDeviceJobGenerator::GenerateJobs()
@@ -27,6 +27,8 @@ public:
KDiskDevice *Device() const; KDiskDevice *Device() const;
KDiskDeviceJobQueue *JobQueue() const; KDiskDeviceJobQueue *JobQueue() const;
KDiskDeviceJobQueue *DetachJobQueue();
status_t GenerateJobs(); status_t GenerateJobs();
private: private:
@@ -1230,7 +1230,9 @@ _kern_commit_disk_device_modifications(partition_id deviceID, port_id port,
// add the jobs to the manager // add the jobs to the manager
if (ManagerLocker locker2 = manager) { if (ManagerLocker locker2 = manager) {
error = manager->AddJobQueue(generator.JobQueue()); error = manager->AddJobQueue(generator.JobQueue());
if (error != B_OK) if (error == B_OK)
generator.DetachJobQueue();
else
return error; return error;
} else } else
return B_ERROR; return B_ERROR;