[colobot] 49/390: Fix task stopping checks in CBrain

Didier Raboud odyx at moszumanska.debian.org
Fri Jun 12 14:21:27 UTC 2015


This is an automated email from the git hooks/post-receive script.

odyx pushed a commit to branch upstream/latest
in repository colobot.

commit 360b72ac5a79734cfc66522ac70ee0f30385622d
Author: Piotr Dziwinski <piotrdz at gmail.com>
Date:   Sun Aug 10 17:57:41 2014 +0200

    Fix task stopping checks in CBrain
    
    This possibly fixes some issues resulting from improperly
    stopping tasks (CTask::Abort() not called before deleting the task).
    Found while looking for instances of #318.
---
 src/object/brain.cpp | 161 ++++++++++++---------------------------------------
 src/object/brain.h   |   2 +-
 2 files changed, 39 insertions(+), 124 deletions(-)

diff --git a/src/object/brain.cpp b/src/object/brain.cpp
index 4bd8742..ca578ba 100644
--- a/src/object/brain.cpp
+++ b/src/object/brain.cpp
@@ -812,11 +812,11 @@ void CBrain::StopProgram()
 
 void CBrain::StopTask()
 {
-    if ( m_primaryTask != 0 )
+    if (m_primaryTask != nullptr)
     {
         m_primaryTask->Abort();
         delete m_primaryTask;  // stops the current task
-        m_primaryTask = 0;
+        m_primaryTask = nullptr;
     }
 }
 
@@ -900,16 +900,10 @@ void CBrain::StopEditScript(bool bCancel)
 
 Error CBrain::StartTaskTake()
 {
-    Error   err;
-
-    if ( m_primaryTask != 0 )
-    {
-        delete m_primaryTask;  // stops the current task
-        m_primaryTask = 0;
-    }
+    StopTask();
 
     m_primaryTask = new CTaskManager(m_object);
-    err = m_primaryTask->StartTaskTake();
+    Error err = m_primaryTask->StartTaskTake();
     UpdateInterface();
     return err;
 }
@@ -918,16 +912,10 @@ Error CBrain::StartTaskTake()
 
 Error CBrain::StartTaskManip(TaskManipOrder order, TaskManipArm arm)
 {
-    Error   err;
-
-    if ( m_primaryTask != 0 )
-    {
-        delete m_primaryTask;  // stops the current task
-        m_primaryTask = 0;
-    }
+    StopTask();
 
     m_primaryTask = new CTaskManager(m_object);
-    err = m_primaryTask->StartTaskManip(order, arm);
+    Error err = m_primaryTask->StartTaskManip(order, arm);
     UpdateInterface();
     return err;
 }
@@ -936,16 +924,10 @@ Error CBrain::StartTaskManip(TaskManipOrder order, TaskManipArm arm)
 
 Error CBrain::StartTaskFlag(TaskFlagOrder order, int rank)
 {
-    Error   err;
-
-    if ( m_primaryTask != 0 )
-    {
-        delete m_primaryTask;  // stops the current task
-        m_primaryTask = 0;
-    }
+    StopTask();
 
     m_primaryTask = new CTaskManager(m_object);
-    err = m_primaryTask->StartTaskFlag(order, rank);
+    Error err = m_primaryTask->StartTaskFlag(order, rank);
     UpdateInterface();
     return err;
 }
@@ -954,16 +936,10 @@ Error CBrain::StartTaskFlag(TaskFlagOrder order, int rank)
 
 Error CBrain::StartTaskBuild(ObjectType type)
 {
-    Error   err;
-
-    if ( m_primaryTask != 0 )
-    {
-        delete m_primaryTask;  // stops the current task
-        m_primaryTask = 0;
-    }
+    StopTask();
 
     m_primaryTask = new CTaskManager(m_object);
-    err = m_primaryTask->StartTaskBuild(type);
+    Error err = m_primaryTask->StartTaskBuild(type);
     UpdateInterface();
     return err;
 }
@@ -972,16 +948,10 @@ Error CBrain::StartTaskBuild(ObjectType type)
 
 Error CBrain::StartTaskSearch()
 {
-    Error   err;
-
-    if ( m_primaryTask != 0 )
-    {
-        delete m_primaryTask;  // stops the current task
-        m_primaryTask = 0;
-    }
+    StopTask();
 
     m_primaryTask = new CTaskManager(m_object);
-    err = m_primaryTask->StartTaskSearch();
+    Error err = m_primaryTask->StartTaskSearch();
     UpdateInterface();
     return err;
 }
@@ -990,38 +960,26 @@ Error CBrain::StartTaskSearch()
 
 Error CBrain::StartTaskTerraform()
 {
-    Error   err;
-
-    if ( m_primaryTask != 0 )
-    {
-        delete m_primaryTask;  // stops the current task
-        m_primaryTask = 0;
-    }
+    StopTask();
 
     m_primaryTask = new CTaskManager(m_object);
-    err = m_primaryTask->StartTaskTerraform();
+    Error err = m_primaryTask->StartTaskTerraform();
     UpdateInterface();
     return err;
 }
 
 // Change pencil.
 
-Error CBrain::StartTaskPen(bool bDown, int color)
+Error CBrain::StartTaskPen(bool down, int color)
 {
-    Error   err;
-
     m_physics->SetMotorSpeedX(0.0f);
     m_physics->SetMotorSpeedY(0.0f);
     m_physics->SetMotorSpeedZ(0.0f);
 
-    if ( m_primaryTask != 0 )
-    {
-        delete m_primaryTask;  // stops the current task
-        m_primaryTask = 0;
-    }
+    StopTask();
 
     m_primaryTask = new CTaskManager(m_object);
-    err = m_primaryTask->StartTaskPen(bDown, color);
+    Error err = m_primaryTask->StartTaskPen(down, color);
     UpdateInterface();
     return err;
 }
@@ -1030,16 +988,10 @@ Error CBrain::StartTaskPen(bool bDown, int color)
 
 Error CBrain::StartTaskRecover()
 {
-    Error   err;
-
-    if ( m_primaryTask != 0 )
-    {
-        delete m_primaryTask;  // stops the current task
-        m_primaryTask = 0;
-    }
+    StopTask();
 
     m_primaryTask = new CTaskManager(m_object);
-    err = m_primaryTask->StartTaskRecover();
+    Error err = m_primaryTask->StartTaskRecover();
     UpdateInterface();
     return err;
 }
@@ -1048,16 +1000,10 @@ Error CBrain::StartTaskRecover()
 
 Error CBrain::StartTaskShield(TaskShieldMode mode)
 {
-    Error   err;
-
-    if ( m_secondaryTask != 0 )
-    {
-        delete m_secondaryTask;  // stops the current task
-        m_secondaryTask = 0;
-    }
+    StopTask();
 
     m_secondaryTask = new CTaskManager(m_object);
-    err = m_secondaryTask->StartTaskShield(mode, 1000.0f);
+    Error err = m_secondaryTask->StartTaskShield(mode, 1000.0f);
     UpdateInterface();
     return err;
 }
@@ -1066,16 +1012,10 @@ Error CBrain::StartTaskShield(TaskShieldMode mode)
 
 Error CBrain::StartTaskFire(float delay)
 {
-    Error   err;
-
-    if ( m_primaryTask != 0 )
-    {
-        delete m_primaryTask;  // stops the current task
-        m_primaryTask = 0;
-    }
+    StopTask();
 
     m_primaryTask = new CTaskManager(m_object);
-    err = m_primaryTask->StartTaskFire(delay);
+    Error err = m_primaryTask->StartTaskFire(delay);
     UpdateInterface();
     return err;
 }
@@ -1084,16 +1024,10 @@ Error CBrain::StartTaskFire(float delay)
 
 Error CBrain::StartTaskSpiderExplo()
 {
-    Error   err;
-
-    if ( m_primaryTask != 0 )
-    {
-        delete m_primaryTask;  // stops the current task
-        m_primaryTask = 0;
-    }
+    StopTask();
 
     m_primaryTask = new CTaskManager(m_object);
-    err = m_primaryTask->StartTaskSpiderExplo();
+    Error err = m_primaryTask->StartTaskSpiderExplo();
     UpdateInterface();
     return err;
 }
@@ -1102,16 +1036,10 @@ Error CBrain::StartTaskSpiderExplo()
 
 Error CBrain::StartTaskFireAnt(Math::Vector impact)
 {
-    Error   err;
-
-    if ( m_primaryTask != 0 )
-    {
-        delete m_primaryTask;  // stops the current task
-        m_primaryTask = 0;
-    }
+    StopTask();
 
     m_primaryTask = new CTaskManager(m_object);
-    err = m_primaryTask->StartTaskFireAnt(impact);
+    Error err = m_primaryTask->StartTaskFireAnt(impact);
     UpdateInterface();
     return err;
 }
@@ -1120,16 +1048,10 @@ Error CBrain::StartTaskFireAnt(Math::Vector impact)
 
 Error CBrain::StartTaskGunGoal(float dirV, float dirH)
 {
-    Error   err;
-
-    if ( m_secondaryTask != 0 )
-    {
-        delete m_secondaryTask;  // stops the current task
-        m_secondaryTask = 0;
-    }
+    StopTask();
 
     m_secondaryTask = new CTaskManager(m_object);
-    err = m_secondaryTask->StartTaskGunGoal(dirV, dirH);
+    Error err = m_secondaryTask->StartTaskGunGoal(dirV, dirH);
     UpdateInterface();
     return err;
 }
@@ -1138,16 +1060,10 @@ Error CBrain::StartTaskGunGoal(float dirV, float dirH)
 
 Error CBrain::StartTaskReset(Math::Vector goal, Math::Vector angle)
 {
-    Error   err;
-
-    if ( m_primaryTask != 0 )
-    {
-        delete m_primaryTask;  // stops the current task
-        m_primaryTask = 0;
-    }
+    StopTask();
 
     m_primaryTask = new CTaskManager(m_object);
-    err = m_primaryTask->StartTaskReset(goal, angle);
+    Error err = m_primaryTask->StartTaskReset(goal, angle);
     UpdateInterface();
     return err;
 }
@@ -1156,30 +1072,29 @@ Error CBrain::StartTaskReset(Math::Vector goal, Math::Vector angle)
 
 Error CBrain::EndedTask()
 {
-    Error   err;
-
-    if ( m_secondaryTask != 0 )  // current task?
+    if (m_secondaryTask != nullptr)  // current task?
     {
-        err = m_secondaryTask->IsEnded();
+        Error err = m_secondaryTask->IsEnded();
         if ( err != ERR_CONTINUE )  // job ended?
         {
             delete m_secondaryTask;
-            m_secondaryTask = 0;
+            m_secondaryTask = nullptr;
             UpdateInterface();
         }
     }
 
-    if ( m_primaryTask != 0 )  // current task?
+    if (m_primaryTask != nullptr)  // current task?
     {
-        err = m_primaryTask->IsEnded();
+        Error err = m_primaryTask->IsEnded();
         if ( err != ERR_CONTINUE )  // job ended?
         {
             delete m_primaryTask;
-            m_primaryTask = 0;
+            m_primaryTask = nullptr;
             UpdateInterface();
         }
         return err;
     }
+
     return ERR_STOP;
 }
 
diff --git a/src/object/brain.h b/src/object/brain.h
index a1f5da7..8a6b13e 100644
--- a/src/object/brain.h
+++ b/src/object/brain.h
@@ -128,7 +128,7 @@ public:
     Error       StartTaskBuild(ObjectType type);
     Error       StartTaskSearch();
     Error       StartTaskTerraform();
-    Error       StartTaskPen(bool bDown, int color);
+    Error       StartTaskPen(bool down, int color);
     Error       StartTaskRecover();
     Error       StartTaskShield(TaskShieldMode mode);
     Error       StartTaskFire(float delay);

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git



More information about the Pkg-games-commits mailing list