Alexander Rukletsov created MESOS-5886: ------------------------------------------
Summary: FUTURE_DISPATCH may react on wrong dispatch. Key: MESOS-5886 URL: https://issues.apache.org/jira/browse/MESOS-5886 Project: Mesos Issue Type: Bug Reporter: Alexander Rukletsov [{{FUTURE_DISPATCH}}|https://github.com/apache/mesos/blob/e8ebbe5fe4189ef7ab046da2276a6abee41deeb2/3rdparty/libprocess/include/process/gmock.hpp#L50] uses [{{DispatchMatcher}}|https://github.com/apache/mesos/blob/e8ebbe5fe4189ef7ab046da2276a6abee41deeb2/3rdparty/libprocess/include/process/gmock.hpp#L350] to figure out whether a processed {{DispatchEvent}} is the same the user is waiting for. However, comparing {{std::type_info}} of function pointers is not enough: different class methods with same signatures will be matched. Here is the test that proves this: {noformat} class DispatchProcess : public Process<DispatchProcess> { public: MOCK_METHOD0(func0, void()); MOCK_METHOD1(func1, bool(bool)); MOCK_METHOD1(func1_same_but_different, bool(bool)); MOCK_METHOD1(func2, Future<bool>(bool)); MOCK_METHOD1(func3, int(int)); MOCK_METHOD2(func4, Future<bool>(bool, int)); }; {noformat} {noformat} TEST(ProcessTest, DispatchMatch) { DispatchProcess process; PID<DispatchProcess> pid = spawn(&process); Future<Nothing> future = FUTURE_DISPATCH( pid, &DispatchProcess::func1_same_but_different); EXPECT_CALL(process, func1(_)) .WillOnce(ReturnArg<0>()); dispatch(pid, &DispatchProcess::func1, true); AWAIT_READY(future); terminate(pid); wait(pid); } {noformat} The test passes: {noformat} [ RUN ] ProcessTest.DispatchMatch [ OK ] ProcessTest.DispatchMatch (1 ms) {noformat} This change was introduced in https://reviews.apache.org/r/28052/. -- This message was sent by Atlassian JIRA (v6.3.4#6332)