Hi,

While digging a bug reported in, I realized an assumption we shouldn't make
in our code.
https://issues.apache.org/jira/browse/MESOS-5023

Say you have the following code:

void some_func()
{
  future
    .onAny(callback_A)
    .onAny(callback_B);
}

Question: will callback_A already be executed before callback_B?

The answer is NO. We should never assume that. Under the following
interleaving, callback_B can be invoked first:

Thread-1                                       Thread-2

onAny(callback_A) {
  onAnyCallbacks.push_back(callback_A);
}
                                                      set() {
                                                        lock()
                                                        if (state ==
PENDING) {
                                                          state = READY;
                                                          result = true;
                                                        }
                                                        unlock();

onAny(callback_B) {
  lock()
  if (state != PENDING) {
    run = true
  }
  unlock()

  if (run) {
    callback_B()
  }

                                                         if (result) {

internal::run(data->onAnyCallbacks,
*this);
                                                         }

- Jie

Reply via email to