| Index: mojo/spy/spy.cc
|
| diff --git a/mojo/spy/spy.cc b/mojo/spy/spy.cc
|
| index 0a4b75a6f3c2c855ef31f333e8b61bf7dc73009c..d29cea5417ea76040c582e1793c6e9084a09fa3d 100644
|
| --- a/mojo/spy/spy.cc
|
| +++ b/mojo/spy/spy.cc
|
| @@ -18,6 +18,11 @@ namespace {
|
| const size_t kMessageBufSize = 2 * 1024;
|
| const size_t kHandleBufSize = 64;
|
|
|
| +void CloseHandles(MojoHandle* handles, size_t count) {
|
| + for (size_t ix = 0; ix != count; ++count)
|
| + MojoClose(handles[ix]);
|
| +}
|
| +
|
| // In charge of processing messages that flow over a
|
| // single message pipe.
|
| class MessageProcessor :
|
| @@ -43,8 +48,8 @@ class MessageProcessor :
|
| wait_flags.push_back(MOJO_WAIT_FLAG_READABLE);
|
| wait_flags.push_back(MOJO_WAIT_FLAG_READABLE);
|
|
|
| - scoped_ptr<char> mbuf(new char[kMessageBufSize]);
|
| - scoped_ptr<MojoHandle> hbuf(new MojoHandle[kHandleBufSize]);
|
| + scoped_ptr<char[]> mbuf(new char[kMessageBufSize]);
|
| + scoped_ptr<MojoHandle[]> hbuf(new MojoHandle[kHandleBufSize]);
|
|
|
| // Main processing loop:
|
| // 1- Wait for an endpoint to have a message.
|
| @@ -87,10 +92,13 @@ class MessageProcessor :
|
| if (!CheckResult(WriteMessageRaw(write_handle,
|
| mbuf.get(), bytes_read,
|
| hbuf.get(), handles_read,
|
| - MOJO_WRITE_MESSAGE_FLAG_NONE)))
|
| + MOJO_WRITE_MESSAGE_FLAG_NONE))) {
|
| + // On failure we own the handles. For now just close them.
|
| + if (handles_read)
|
| + CloseHandles(hbuf.get(), handles_read);
|
| break;
|
| + }
|
| }
|
| -
|
| }
|
|
|
| private:
|
|
|