Boost logo

Threads-Devel :

Subject: [Threads-devel] unbind passed function to the thread constructor after real thread exits
From: dadrus_at_[hidden]
Date: 2009-02-19 04:45:59


Hi,
I'm not very familiar with the implementation of Boost.Thread. However i think there is a bug (see my simplified example):

class foo {
private:
  // some members

public:
  void func(int arg1) {
    // some calculation
  }
};

int main() {
  boost::smart_ptr<foo> f(new foo); // a

  boost::thread t(boost::bind(&foo::func, f, 1)); // b

  t.join(); // c

  f.reset(); // d

  return 1;
}

step 1: we've only one reference to foo object after a.
step 2: after b we've 2 references to foo
step 3: after c we've still have 2 references even though the real thread of execution exit
step 4: after d we've 1 reference which is store in t object.

I think that a cler solution would be to unbind a function object passed to the thread constructor after real thread of execution exit. Otherwise
one can generate a lot of memory leaks.

Is this a known problem?
Are there plans to fix it?

By the way Boost.Threadpool (boost vault) has the same problem.

Regards
Dimitrij Drus

-- 
Jetzt 1 Monat kostenlos! GMX FreeDSL - Telefonanschluss + DSL 
für nur 17,95 Euro/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K11308T4569a

Threads-Devel list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk