You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2012/08/24 22:53:25 UTC
svn commit: r1377106 - in /incubator/mesos/trunk/third_party/libprocess:
include/process/future.hpp src/process.cpp
Author: benh
Date: Fri Aug 24 20:53:25 2012
New Revision: 1377106
URL: http://svn.apache.org/viewvc?rev=1377106&view=rev
Log:
Bug fixes for C++11 implementation of then.
Modified:
incubator/mesos/trunk/third_party/libprocess/include/process/future.hpp
incubator/mesos/trunk/third_party/libprocess/src/process.cpp
Modified: incubator/mesos/trunk/third_party/libprocess/include/process/future.hpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/third_party/libprocess/include/process/future.hpp?rev=1377106&r1=1377105&r2=1377106&view=diff
==============================================================================
--- incubator/mesos/trunk/third_party/libprocess/include/process/future.hpp (original)
+++ incubator/mesos/trunk/third_party/libprocess/include/process/future.hpp Fri Aug 24 20:53:25 2012
@@ -803,19 +803,25 @@ auto Future<T>::then(F f) const
std::tr1::shared_ptr<Promise<X>> promise(new Promise<X>());
+ // TODO(benh): Need to use a weak_ptr here so that we don't keep the
+ // future from getting cleaned up when there are no actually no more
+ // references!
+ Future<T> future(*this);
+
onAny([=] () {
- if (this->isReady()) {
- promise->set(f(this->get()));
- } else if (this->isFailed()) {
- promise->fail(this->failure());
- } else if (this->isDiscarded()) {
+ if (future.isReady()) {
+ promise->set(f(future.get()));
+ } else if (future.isFailed()) {
+ promise->fail(future.failure());
+ } else if (future.isDiscarded()) {
promise->future().discard();
+ } else if (future.isPending()) {
}
});
promise->future().onDiscarded([=] () {
- if (this->isPending()) {
- this->discard();
+ if (future.isPending()) {
+ Future<T>(future).discard(); // Need copy since 'discard' isn't const.
}
});
Modified: incubator/mesos/trunk/third_party/libprocess/src/process.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/third_party/libprocess/src/process.cpp?rev=1377106&r1=1377105&r2=1377106&view=diff
==============================================================================
--- incubator/mesos/trunk/third_party/libprocess/src/process.cpp (original)
+++ incubator/mesos/trunk/third_party/libprocess/src/process.cpp Fri Aug 24 20:53:25 2012
@@ -3040,6 +3040,8 @@ void read(int fd,
Future<short> poll(int fd, short events)
{
+ process::initialize();
+
// TODO(benh): Check if the file descriptor is non-blocking?
Promise<short>* promise = new Promise<short>();
@@ -3066,6 +3068,8 @@ Future<short> poll(int fd, short events)
Future<size_t> read(int fd, void* data, size_t size)
{
+ process::initialize();
+
std::tr1::shared_ptr<Promise<size_t> > promise(new Promise<size_t>());
// Check the file descriptor.