Index: gpu/command_buffer/client/buffer_tracker.cc |
diff --git a/gpu/command_buffer/client/buffer_tracker.cc b/gpu/command_buffer/client/buffer_tracker.cc |
index 3e4e087ed364e72628de47bc9d211e120ce6c4c7..c99afe3343425d1bafbffa6ac14b3f3cc2582b34 100644 |
--- a/gpu/command_buffer/client/buffer_tracker.cc |
+++ b/gpu/command_buffer/client/buffer_tracker.cc |
@@ -24,12 +24,15 @@ BufferTracker::~BufferTracker() { |
BufferTracker::Buffer* BufferTracker::CreateBuffer( |
GLuint id, GLsizeiptr size) { |
GPU_DCHECK_NE(0u, id); |
- GPU_DCHECK_LT(0, size); |
- int32 shm_id; |
- uint32 shm_offset; |
- void* address = mapped_memory_->Alloc(size, &shm_id, &shm_offset); |
- if (!address) { |
- return NULL; |
+ GPU_DCHECK_LE(0, size); |
+ int32 shm_id = -1; |
+ uint32 shm_offset = 0; |
+ void* address = NULL; |
+ if (size) { |
+ address = mapped_memory_->Alloc(size, &shm_id, &shm_offset); |
+ if (!address) { |
+ return NULL; |
+ } |
} |
Buffer* buffer = new Buffer(id, size, shm_id, shm_offset, address); |
@@ -56,8 +59,8 @@ void BufferTracker::RemoveBuffer(GLuint client_id) { |
} |
void BufferTracker::FreePendingToken(Buffer* buffer, int32 token) { |
- GPU_DCHECK(buffer->address_); |
- mapped_memory_->FreePendingToken(buffer->address_, token); |
+ if (buffer->address_) |
+ mapped_memory_->FreePendingToken(buffer->address_, token); |
buffer->size_ = 0; |
buffer->shm_id_ = 0; |
buffer->shm_offset_ = 0; |