|  |  | @ -425,7 +425,7 @@ class PosixWritableFile : public WritableFile { | 
			
		
	
		
		
			
				
					
					|  |  |  |   int fd_; |  |  |  |   int fd_; | 
			
		
	
		
		
			
				
					
					|  |  |  |   size_t cursize_;      // current size of cached data in buf_
 |  |  |  |   size_t cursize_;      // current size of cached data in buf_
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   size_t capacity_;     // max size of buf_
 |  |  |  |   size_t capacity_;     // max size of buf_
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   char* buf_;           // a buffer to cache writes
 |  |  |  |   unique_ptr<char[]> buf_;           // a buffer to cache writes
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   uint64_t filesize_; |  |  |  |   uint64_t filesize_; | 
			
		
	
		
		
			
				
					
					|  |  |  |   bool pending_sync_; |  |  |  |   bool pending_sync_; | 
			
		
	
		
		
			
				
					
					|  |  |  |   bool pending_fsync_; |  |  |  |   bool pending_fsync_; | 
			
		
	
	
		
		
			
				
					|  |  | @ -448,8 +448,6 @@ class PosixWritableFile : public WritableFile { | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (fd_ >= 0) { |  |  |  |     if (fd_ >= 0) { | 
			
		
	
		
		
			
				
					
					|  |  |  |       PosixWritableFile::Close(); |  |  |  |       PosixWritableFile::Close(); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |     delete buf_; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     buf_ = 0; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   virtual Status Append(const Slice& data) { |  |  |  |   virtual Status Append(const Slice& data) { | 
			
		
	
	
		
		
			
				
					|  |  | @ -468,9 +466,8 @@ class PosixWritableFile : public WritableFile { | 
			
		
	
		
		
			
				
					
					|  |  |  |       } |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  |       // Increase the buffer size, but capped at 1MB
 |  |  |  |       // Increase the buffer size, but capped at 1MB
 | 
			
		
	
		
		
			
				
					
					|  |  |  |       if (capacity_ < (1<<20)) { |  |  |  |       if (capacity_ < (1<<20)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         delete buf_; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         capacity_ *= 2; |  |  |  |         capacity_ *= 2; | 
			
		
	
		
		
			
				
					
					|  |  |  |         buf_ = new char[capacity_]; |  |  |  |         buf_.reset(new char[capacity_]); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       } |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  |       assert(cursize_ == 0); |  |  |  |       assert(cursize_ == 0); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
	
		
		
			
				
					|  |  | @ -478,7 +475,7 @@ class PosixWritableFile : public WritableFile { | 
			
		
	
		
		
			
				
					
					|  |  |  |     // if the write fits into the cache, then write to cache
 |  |  |  |     // if the write fits into the cache, then write to cache
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     // otherwise do a write() syscall to write to OS buffers.
 |  |  |  |     // otherwise do a write() syscall to write to OS buffers.
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (cursize_ + left <= capacity_) { |  |  |  |     if (cursize_ + left <= capacity_) { | 
			
		
	
		
		
			
				
					
					|  |  |  |       memcpy(buf_+cursize_, src, left); |  |  |  |       memcpy(buf_.get()+cursize_, src, left); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       cursize_ += left; |  |  |  |       cursize_ += left; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } else { |  |  |  |     } else { | 
			
		
	
		
		
			
				
					
					|  |  |  |       while (left != 0) { |  |  |  |       while (left != 0) { | 
			
		
	
	
		
		
			
				
					|  |  | @ -511,7 +508,7 @@ class PosixWritableFile : public WritableFile { | 
			
		
	
		
		
			
				
					
					|  |  |  |   // write out the cached data to the OS cache
 |  |  |  |   // write out the cached data to the OS cache
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   virtual Status Flush() { |  |  |  |   virtual Status Flush() { | 
			
		
	
		
		
			
				
					
					|  |  |  |     size_t left = cursize_; |  |  |  |     size_t left = cursize_; | 
			
		
	
		
		
			
				
					
					|  |  |  |     char* src = buf_; |  |  |  |     char* src = buf_.get(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     while (left != 0) { |  |  |  |     while (left != 0) { | 
			
		
	
		
		
			
				
					
					|  |  |  |       ssize_t done = write(fd_, src, left); |  |  |  |       ssize_t done = write(fd_, src, left); | 
			
		
	
		
		
			
				
					
					|  |  |  |       if (done < 0) { |  |  |  |       if (done < 0) { | 
			
		
	
	
		
		
			
				
					|  |  | 
 |