> On Feb. 3, 2014, 5:10 p.m., Niklas Nielsen wrote:
> > 3rdparty/libprocess/include/process/subprocess.hpp, lines 157-159
> > <https://reviews.apache.org/r/17306/diff/5/?file=454081#file454081line157>
> >
> > Hey Ben,
> >
> > These lines fail to compile on GCC 4.8.1:
> > error: ignoring return value of ‘ssize_t write(int, const void*,
> > size_t)’, declared with attribute warn_unused_result [-Werror=unused-result]
>
> Ian Downes wrote:
> This is the same thing I missed when using write. I just explicitly
> ignored the return value with (void) write(...). Is that an acceptable
> solution?
>
> Niklas Nielsen wrote:
> Unfortunately not; still breaks.
>
> Think you need to read it:
>
> ssize_t written = ...
> (void)written;
>
> Ben Mahler wrote:
> Interesting, I don't have this issue with gcc-4.8.2 on OS X 10.8. Perhaps
> write is only declared with the warn_unused_result attribute on OS X 10.9?
>
> I will likely _exit(1) if write returns -1, as opposed to ignoring the
> return value, if that sounds good to you guys.
>
> Niklas Nielsen wrote:
> I ran into the problem on "gcc version 4.8.1 (Ubuntu/Linaro
> 4.8.1-10ubuntu9)"
What about this?
diff --git a/3rdparty/libprocess/include/process/subprocess.hpp
b/3rdparty/libprocess/include/process/subprocess.hpp
index db9c96b..452eeea 100644
--- a/3rdparty/libprocess/include/process/subprocess.hpp
+++ b/3rdparty/libprocess/include/process/subprocess.hpp
@@ -154,9 +154,12 @@ inline Try<Subprocess> subprocess(const std::string&
command)
// implemented in an unsafe manner:
// http://austingroupbugs.net/view.php?id=692
const char* message = "Failed to execl '/bin sh -c ";
- write(STDERR_FILENO, message, strlen(message));
- write(STDERR_FILENO, command.c_str(), command.size());
- write(STDERR_FILENO, "'\n", strlen("'\n"));
+ while (write(STDERR_FILENO, message, strlen(message)) == -1 &&
+ errno == EINTR);
+ while (write(STDERR_FILENO, command.c_str(), command.size()) == -1 &&
+ errno == EINTR);
+ while (write(STDERR_FILENO, "'\n", strlen("'\n")) == -1 &&
+ errno == EINTR);
_exit(1);
}
- Ben
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/17306/#review33437
-----------------------------------------------------------
On Jan. 30, 2014, 12:28 a.m., Ben Mahler wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/17306/
> -----------------------------------------------------------
>
> (Updated Jan. 30, 2014, 12:28 a.m.)
>
>
> Review request for mesos, Benjamin Hindman and Vinod Kone.
>
>
> Bugs: MESOS-943
> https://issues.apache.org/jira/browse/MESOS-943
>
>
> Repository: mesos-git
>
>
> Description
> -------
>
> This adds an asynchronous mechanism for subprocess execution, per MESOS-943.
>
> What started simple was made a little more complex due to the following
> issues:
>
> 1. Who is responsible for closing the input / output descriptors?
>
> Placing this burden onto the caller of subprocess() seems likely to yield
> leaked open file descriptors. This introduced the notion of a shared_ptr /
> destructor / copy constructor / assignment constructor to ensure that the
> file descriptors are closed when the handle to the file descriptors are lost.
> However, even with my implementation, one may copy these file descriptors, at
> which point they may be deleted from underneath them.
>
> 2. What does discarding the status entail? Does it kill the process?
>
> The current implementation kills the process, which requires the use of an
> explicit Promise to deal with the discard from the caller not affecting the
> reaper's future. If discard() is a no-op, we must still use an explicit
> Promise to preserve the notification from the Reaper (so that we can know
> when to delete the Reaper).
>
>
> That's about it, I've added tests that demonstrate the ability to communicate
> with the subprocess through stdin / stout / stderr.
>
> Please let me know if you find any simplifications that can be made! (Other
> than C++11 lambdas, of course :))
>
>
> Diffs
> -----
>
> 3rdparty/libprocess/Makefile.am 40f01a7b3803696ccca440c8326e1d6d7c377459
> 3rdparty/libprocess/include/process/subprocess.hpp PRE-CREATION
> 3rdparty/libprocess/src/tests/subprocess_tests.cpp PRE-CREATION
>
> Diff: https://reviews.apache.org/r/17306/diff/
>
>
> Testing
> -------
>
> Tests were added and ran in repetition.
>
>
> Thanks,
>
> Ben Mahler
>
>