fixed a segfault caused by formula ai self-reference-counting quirks,

...plus removed some accidential whitespace.
This commit is contained in:
Iurii Chernyi 2009-05-21 00:18:42 +00:00
parent 8bad423be1
commit 04b7191335
6 changed files with 11 additions and 10 deletions

View File

@ -243,6 +243,7 @@ ai_default::ai_default(ai::readwrite_context &context) :
recruiting_preferred_(0),
formula_ai_(NULL)
{
add_ref();
}
ai_default::~ai_default(){

View File

@ -34,7 +34,7 @@ public:
set_side(side);
}
int get_recursion_count() const{
return recursion_counter_.get_count();
return recursion_counter_.get_count();
}
private:
ai::recursion_counter recursion_counter_;

View File

@ -101,7 +101,7 @@ namespace dfool {
*/
class dfool_ai : public ai::readwrite_context_proxy, public ai_interface {
public:
dfool_ai(ai::readwrite_context &context)
dfool_ai(ai::readwrite_context &context)
: ai::side_context_proxy(context), ai::readonly_context_proxy(context), ai::readwrite_context_proxy(context), recursion_counter_(context.get_recursion_count()), unit_memory_(current_team().ai_memory()){}
void play_turn();
virtual std::string describe_self();

View File

@ -49,19 +49,19 @@ namespace ai {
int side_context_impl::get_recursion_count() const
{
return recursion_counter_.get_count();
return recursion_counter_.get_count();
}
int readonly_context_impl::get_recursion_count() const
{
return recursion_counter_.get_count();
return recursion_counter_.get_count();
}
int readwrite_context_impl::get_recursion_count() const
{
return recursion_counter_.get_count();
return recursion_counter_.get_count();
}

View File

@ -41,7 +41,7 @@ namespace ai {
// recursion counter
class recursion_counter {
public:
recursion_counter(int counter)
recursion_counter(int counter)
: counter_(counter++)
{
if (counter > MAX_COUNTER_VALUE ) {
@ -52,7 +52,7 @@ public:
int get_count() const{
return counter_;
}
static const int MAX_COUNTER_VALUE = 100;//max recursion depth
private:
int counter_;
@ -71,7 +71,6 @@ public:
virtual side_context& get_side_context() = 0;
virtual int get_recursion_count() const = 0;
};
class readonly_context;
@ -350,7 +349,7 @@ public:
/**
* Unwrap - this class is not a proxy, so return *this
*/
virtual readonly_context& get_readonly_context()
virtual readonly_context& get_readonly_context()
{
return *this;
}
@ -479,7 +478,7 @@ public:
/**
* Unwrap - this class is not a proxy, so return *this
*/
virtual readwrite_context& get_readwrite_context()
virtual readwrite_context& get_readwrite_context()
{
return *this;
}

View File

@ -1623,6 +1623,7 @@ formula_ai::formula_ai(ai::readwrite_context &context) :
function_table(*this),
candidate_action_manager_()
{
add_ref();
}
void formula_ai::handle_exception(game_logic::formula_error& e) const