Re: Private members of ref counted classes and lambdas

2015-06-04 Thread Daniel Holbert
On 06/04/2015 07:29 AM, Andrew Osmond wrote:
 Suppose I have some ref counted class Foo with the private member mBar.
 Normally with a lambda expression, [...]
 obviously the Foo object could get released before the dispatch
 completes

You may be interested in this thread from a few months back:
Proposal to ban the usage of refcounted objects inside C++ lambdas in
Gecko
https://groups.google.com/d/msg/mozilla.dev.platform/Ec2y6BWKrbM/xpHLGwJ337wJ

(Not sure it arrived at a concrete conclusion, but you may run across
some pitfalls/suggestions at least. I haven't used lambdas in C++, so I
won't attempt to directly answer your question.)

~Daniel
___
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform


Re: Private members of ref counted classes and lambdas

2015-06-04 Thread Seth Fowler

 On Jun 4, 2015, at 11:17 AM, Daniel Holbert dholb...@mozilla.com wrote:
 
 You may be interested in this thread from a few months back:
 Proposal to ban the usage of refcounted objects inside C++ lambdas in
 Gecko
 https://groups.google.com/d/msg/mozilla.dev.platform/Ec2y6BWKrbM/xpHLGwJ337wJ
 
 (Not sure it arrived at a concrete conclusion, but you may run across
 some pitfalls/suggestions at least. I haven't used lambdas in C++, so I
 won't attempt to directly answer your question.)

My impression was that the conclusion was “refcounted objects are not banned 
inside C++ lambdas” - i.e., no policy change from the status quo - but we need 
to be aware of the pitfalls”. The pitfalls are discussed pretty thoroughly in 
the thread.

- Seth
___
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform


Re: Private members of ref counted classes and lambdas

2015-06-04 Thread Andrew Osmond
Turns out my original problem was some other mistake I made. Using just
self works (thanks botond for the poke on IRC about that).

I remember reading the linked thread, although I had since forgotten about
it -- thanks for the reminder. My impression was that using raw pointers
for ref counted objects with lambdas is something to be discouraged,
rightfully so. That's why I use nsRefPtr, just like I would if I explicitly
used a nested class inheriting from nsRunnable instead of a lambda. I'll
review the thread again though (I *did* forgot about using Move, perhaps
other bits as well).

On Thu, Jun 4, 2015 at 2:24 PM, Seth Fowler s...@mozilla.com wrote:


  On Jun 4, 2015, at 11:17 AM, Daniel Holbert dholb...@mozilla.com
 wrote:
 
  You may be interested in this thread from a few months back:
  Proposal to ban the usage of refcounted objects inside C++ lambdas in
  Gecko
 
 https://groups.google.com/d/msg/mozilla.dev.platform/Ec2y6BWKrbM/xpHLGwJ337wJ
 
  (Not sure it arrived at a concrete conclusion, but you may run across
  some pitfalls/suggestions at least. I haven't used lambdas in C++, so I
  won't attempt to directly answer your question.)

 My impression was that the conclusion was “refcounted objects are not
 banned inside C++ lambdas” - i.e., no policy change from the status quo -
 but we need to be aware of the pitfalls”. The pitfalls are discussed
 pretty thoroughly in the thread.

 - Seth
___
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform


Re: Private members of ref counted classes and lambdas

2015-06-04 Thread Botond Ballo
On Thu, Jun 4, 2015 at 2:24 PM, Seth Fowler s...@mozilla.com wrote:
 My impression was that the conclusion was “refcounted objects are not banned 
 inside C++ lambdas” - i.e., no policy change from the status quo - but we 
 need to be aware of the pitfalls”. The pitfalls are discussed pretty 
 thoroughly in the thread.

Capturing of raw pointers to refcounted objects was in fact banned - a
static analysis forbidding it was introduced in bug 1153304.

(Note that, as I discovered recently, the static analysis was
over-eager and was also complaining about raw pointers to refcounted
object being taken as an argument or used as a local variable inside a
lambda - I'm about to land a fix for that in bug 1170388).

Cheers,
Botond
___
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform