| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 
|  | 2 // Use of this source code is governed by a BSD-style license that can be | 
|  | 3 // found in the LICENSE file. | 
|  | 4 | 
|  | 5 #include "mojo/system/data_pipe_producer_dispatcher.h" | 
|  | 6 | 
|  | 7 #include "base/logging.h" | 
|  | 8 #include "mojo/system/data_pipe.h" | 
|  | 9 #include "mojo/system/memory.h" | 
|  | 10 | 
|  | 11 namespace mojo { | 
|  | 12 namespace system { | 
|  | 13 | 
|  | 14 DataPipeProducerDispatcher::DataPipeProducerDispatcher() { | 
|  | 15 } | 
|  | 16 | 
|  | 17 void DataPipeProducerDispatcher::Init(scoped_refptr<DataPipe> data_pipe) { | 
|  | 18   DCHECK(data_pipe.get()); | 
|  | 19   data_pipe_ = data_pipe; | 
|  | 20 } | 
|  | 21 | 
|  | 22 DataPipeProducerDispatcher::~DataPipeProducerDispatcher() { | 
|  | 23   // |Close()|/|CloseImplNoLock()| should have taken care of the pipe. | 
|  | 24   DCHECK(!data_pipe_.get()); | 
|  | 25 } | 
|  | 26 | 
|  | 27 void DataPipeProducerDispatcher::CancelAllWaitersNoLock() { | 
|  | 28   lock().AssertAcquired(); | 
|  | 29   data_pipe_->ProducerCancelAllWaiters(); | 
|  | 30 } | 
|  | 31 | 
|  | 32 MojoResult DataPipeProducerDispatcher::CloseImplNoLock() { | 
|  | 33   lock().AssertAcquired(); | 
|  | 34   data_pipe_->ProducerClose(); | 
|  | 35   data_pipe_ = NULL; | 
|  | 36   return MOJO_RESULT_OK; | 
|  | 37 } | 
|  | 38 | 
|  | 39 MojoResult DataPipeProducerDispatcher::WriteDataImplNoLock( | 
|  | 40     const void* elements, | 
|  | 41     uint32_t* num_elements, | 
|  | 42     MojoWriteDataFlags flags) { | 
|  | 43   lock().AssertAcquired(); | 
|  | 44 | 
|  | 45   if (!VerifyUserPointer<uint32_t>(num_elements, 1)) | 
|  | 46     return MOJO_RESULT_INVALID_ARGUMENT; | 
|  | 47   if (!VerifyUserPointerForSize(elements, data_pipe_->element_size(), | 
|  | 48                                 *num_elements)) | 
|  | 49     return MOJO_RESULT_INVALID_ARGUMENT; | 
|  | 50 | 
|  | 51   return data_pipe_->ProducerWriteData(elements, num_elements, flags); | 
|  | 52 } | 
|  | 53 | 
|  | 54 MojoResult DataPipeProducerDispatcher::BeginWriteDataImplNoLock( | 
|  | 55     void** buffer, | 
|  | 56     uint32_t* buffer_num_elements, | 
|  | 57     MojoWriteDataFlags flags) { | 
|  | 58   lock().AssertAcquired(); | 
|  | 59 | 
|  | 60   if (!VerifyUserPointer<void*>(buffer, 1)) | 
|  | 61     return MOJO_RESULT_INVALID_ARGUMENT; | 
|  | 62   if (!VerifyUserPointer<uint32_t>(buffer_num_elements, 1)) | 
|  | 63     return MOJO_RESULT_INVALID_ARGUMENT; | 
|  | 64 | 
|  | 65   return data_pipe_->ProducerBeginWriteData(buffer, buffer_num_elements, flags); | 
|  | 66 } | 
|  | 67 | 
|  | 68 MojoResult DataPipeProducerDispatcher::EndWriteDataImplNoLock( | 
|  | 69     uint32_t num_elements_written) { | 
|  | 70   lock().AssertAcquired(); | 
|  | 71 | 
|  | 72   return data_pipe_->ProducerEndWriteData(num_elements_written); | 
|  | 73 } | 
|  | 74 | 
|  | 75 MojoResult DataPipeProducerDispatcher::AddWaiterImplNoLock( | 
|  | 76     Waiter* waiter, | 
|  | 77     MojoWaitFlags flags, | 
|  | 78     MojoResult wake_result) { | 
|  | 79   lock().AssertAcquired(); | 
|  | 80   return data_pipe_->ProducerAddWaiter(waiter, flags, wake_result); | 
|  | 81 } | 
|  | 82 | 
|  | 83 void DataPipeProducerDispatcher::RemoveWaiterImplNoLock(Waiter* waiter) { | 
|  | 84   lock().AssertAcquired(); | 
|  | 85   data_pipe_->ProducerRemoveWaiter(waiter); | 
|  | 86 } | 
|  | 87 | 
|  | 88 scoped_refptr<Dispatcher> | 
|  | 89 DataPipeProducerDispatcher::CreateEquivalentDispatcherAndCloseImplNoLock() { | 
|  | 90   lock().AssertAcquired(); | 
|  | 91 | 
|  | 92   scoped_refptr<DataPipeProducerDispatcher> rv = | 
|  | 93       new DataPipeProducerDispatcher(); | 
|  | 94   rv->Init(data_pipe_); | 
|  | 95   data_pipe_ = NULL; | 
|  | 96   return scoped_refptr<Dispatcher>(rv.get()); | 
|  | 97 } | 
|  | 98 | 
|  | 99 }  // namespace system | 
|  | 100 }  // namespace mojo | 
| OLD | NEW | 
|---|