> On March 26, 2014, 10:28 a.m., Ben Mahler wrote:
> > 3rdparty/libprocess/src/metrics/metric.cpp, lines 26-35
> > <https://reviews.apache.org/r/18718/diff/17/?file=537651#file537651line26>
> >
> >     Is this safe?
> >     
> >     Once we're inside the Parent destructor, the Child destructor has 
> > completed (for Gauge/Metric). On another thread, we're going to try to 
> > invoke get(). Seems unsafe, no?
> 
> Dominic Hamon wrote:
>     Your concern is that we can still call get on the derived class between 
> the derived and parent destructor runs. You're right - we should remove as 
> the first step in the destructor of the derived class.
>     
>     I don't know of a good way to enforce it other than checking in the base 
> (Metric) destructor that the metric has been removed. I'm open to 
> alternatives.
>

There may be another option:

The Metric is either type 'Gauge' or type 'Metric' depending on when during 
destruction 'get' is called from another thread. 'get' for a derived Metric is 
always valid to call. 'get' on the base Metric class is a problem because it is 
pure virtual.

Possible solution then:

Metric::get returns a Future<Option<double>> instead and the implementation in 
Metric returns Option::none(). Wherever we are in the destruction order, we end 
up returning something valid.

Thoughts?


- Dominic


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/18718/#review38629
-----------------------------------------------------------


On March 26, 2014, 10:09 a.m., Dominic Hamon wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/18718/
> -----------------------------------------------------------
> 
> (Updated March 26, 2014, 10:09 a.m.)
> 
> 
> Review request for mesos, Benjamin Hindman and Ben Mahler.
> 
> 
> Bugs: MESOS-1036
>     https://issues.apache.org/jira/browse/MESOS-1036
> 
> 
> Repository: mesos-git
> 
> 
> Description
> -------
> 
> See summary
> 
> 
> Diffs
> -----
> 
>   3rdparty/libprocess/Makefile.am e452ec6256042ce9388e59f4586e1084075fe621 
>   3rdparty/libprocess/include/process/metrics/counter.hpp PRE-CREATION 
>   3rdparty/libprocess/include/process/metrics/gauge.hpp PRE-CREATION 
>   3rdparty/libprocess/include/process/metrics/metric.hpp PRE-CREATION 
>   3rdparty/libprocess/src/metrics/metric.cpp PRE-CREATION 
>   3rdparty/libprocess/src/metrics/metrics.hpp PRE-CREATION 
>   3rdparty/libprocess/src/metrics/metrics.cpp PRE-CREATION 
>   3rdparty/libprocess/src/tests/metrics_tests.cpp PRE-CREATION 
> 
> Diff: https://reviews.apache.org/r/18718/diff/
> 
> 
> Testing
> -------
> 
> Added unit tests. make check.
> 
> 
> Thanks,
> 
> Dominic Hamon
> 
>

Reply via email to