| Index: trunk/src/ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.cc
|
| ===================================================================
|
| --- trunk/src/ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.cc (revision 284790)
|
| +++ trunk/src/ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.cc (working copy)
|
| @@ -111,16 +111,27 @@
|
| }
|
|
|
| // Called from main thread to send bytes to the translator.
|
| -void PnaclTranslateThread::PutBytes(const void* bytes, int32_t count) {
|
| +void PnaclTranslateThread::PutBytes(std::vector<char>* bytes, int count) {
|
| + PLUGIN_PRINTF(("PutBytes (this=%p, bytes=%p, size=%" NACL_PRIuS
|
| + ", count=%d)\n",
|
| + this, bytes, bytes ? bytes->size() : 0, count));
|
| + size_t buffer_size = 0;
|
| CHECK(bytes != NULL);
|
| + // Ensure that the buffer we send to the translation thread is the right size
|
| + // (count can be < the buffer size). This can be done without the lock.
|
| + buffer_size = bytes->size();
|
| + bytes->resize(count);
|
| +
|
| NaClXMutexLock(&cond_mu_);
|
| - std::vector<char> v;
|
| - data_buffers_.push_back(v);
|
| - data_buffers_.back().insert(v.end(),
|
| - static_cast<const char*>(bytes),
|
| - static_cast<const char*>(bytes) + count);
|
| +
|
| + data_buffers_.push_back(std::vector<char>());
|
| + bytes->swap(data_buffers_.back()); // Avoid copying the buffer data.
|
| +
|
| NaClXCondVarSignal(&buffer_cond_);
|
| NaClXMutexUnlock(&cond_mu_);
|
| +
|
| + // Ensure the buffer we send back to the coordinator is the expected size
|
| + bytes->resize(buffer_size);
|
| }
|
|
|
| void PnaclTranslateThread::EndStream() {
|
|
|