Merge pull request #2326 from karalabe/goleveldb-datarace-fix
Godeps: pull in the leveldb upstream write race fix
This commit is contained in:
		
						commit
						c3a4874e5e
					
				
							
								
								
									
										24
									
								
								Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										24
									
								
								Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							| @ -140,51 +140,51 @@ | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/syndtr/goleveldb/leveldb", | ||||
| 			"Rev": "ad0d8b2ab58a55ed5c58073aa46451d5e1ca1280" | ||||
| 			"Rev": "917f41c560270110ceb73c5b38be2a9127387071" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/syndtr/goleveldb/leveldb/cache", | ||||
| 			"Rev": "ad0d8b2ab58a55ed5c58073aa46451d5e1ca1280" | ||||
| 			"Rev": "917f41c560270110ceb73c5b38be2a9127387071" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/syndtr/goleveldb/leveldb/comparer", | ||||
| 			"Rev": "ad0d8b2ab58a55ed5c58073aa46451d5e1ca1280" | ||||
| 			"Rev": "917f41c560270110ceb73c5b38be2a9127387071" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/syndtr/goleveldb/leveldb/errors", | ||||
| 			"Rev": "ad0d8b2ab58a55ed5c58073aa46451d5e1ca1280" | ||||
| 			"Rev": "917f41c560270110ceb73c5b38be2a9127387071" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/syndtr/goleveldb/leveldb/filter", | ||||
| 			"Rev": "ad0d8b2ab58a55ed5c58073aa46451d5e1ca1280" | ||||
| 			"Rev": "917f41c560270110ceb73c5b38be2a9127387071" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/syndtr/goleveldb/leveldb/iterator", | ||||
| 			"Rev": "ad0d8b2ab58a55ed5c58073aa46451d5e1ca1280" | ||||
| 			"Rev": "917f41c560270110ceb73c5b38be2a9127387071" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/syndtr/goleveldb/leveldb/journal", | ||||
| 			"Rev": "ad0d8b2ab58a55ed5c58073aa46451d5e1ca1280" | ||||
| 			"Rev": "917f41c560270110ceb73c5b38be2a9127387071" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/syndtr/goleveldb/leveldb/memdb", | ||||
| 			"Rev": "ad0d8b2ab58a55ed5c58073aa46451d5e1ca1280" | ||||
| 			"Rev": "917f41c560270110ceb73c5b38be2a9127387071" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/syndtr/goleveldb/leveldb/opt", | ||||
| 			"Rev": "ad0d8b2ab58a55ed5c58073aa46451d5e1ca1280" | ||||
| 			"Rev": "917f41c560270110ceb73c5b38be2a9127387071" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/syndtr/goleveldb/leveldb/storage", | ||||
| 			"Rev": "ad0d8b2ab58a55ed5c58073aa46451d5e1ca1280" | ||||
| 			"Rev": "917f41c560270110ceb73c5b38be2a9127387071" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/syndtr/goleveldb/leveldb/table", | ||||
| 			"Rev": "ad0d8b2ab58a55ed5c58073aa46451d5e1ca1280" | ||||
| 			"Rev": "917f41c560270110ceb73c5b38be2a9127387071" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/syndtr/goleveldb/leveldb/util", | ||||
| 			"Rev": "ad0d8b2ab58a55ed5c58073aa46451d5e1ca1280" | ||||
| 			"Rev": "917f41c560270110ceb73c5b38be2a9127387071" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "golang.org/x/crypto/pbkdf2", | ||||
|  | ||||
							
								
								
									
										6
									
								
								Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb/db_write.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb/db_write.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -166,15 +166,15 @@ func (db *DB) Write(b *Batch, wo *opt.WriteOptions) (err error) { | ||||
| 	merged := 0 | ||||
| 	danglingMerge := false | ||||
| 	defer func() { | ||||
| 		for i := 0; i < merged; i++ { | ||||
| 			db.writeAckC <- err | ||||
| 		} | ||||
| 		if danglingMerge { | ||||
| 			// Only one dangling merge at most, so this is safe.
 | ||||
| 			db.writeMergedC <- false | ||||
| 		} else { | ||||
| 			<-db.writeLockC | ||||
| 		} | ||||
| 		for i := 0; i < merged; i++ { | ||||
| 			db.writeAckC <- err | ||||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
| 	mdb, mdbFree, err := db.flush(b.size()) | ||||
|  | ||||
							
								
								
									
										21
									
								
								Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb/util/pool.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb/util/pool.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,21 +0,0 @@ | ||||
| // Copyright (c) 2014, Suryandaru Triandana <syndtr@gmail.com>
 | ||||
| // All rights reserved.
 | ||||
| //
 | ||||
| // Use of this source code is governed by a BSD-style license that can be
 | ||||
| // found in the LICENSE file.
 | ||||
| 
 | ||||
| // +build go1.3
 | ||||
| 
 | ||||
| package util | ||||
| 
 | ||||
| import ( | ||||
| 	"sync" | ||||
| ) | ||||
| 
 | ||||
| type Pool struct { | ||||
| 	sync.Pool | ||||
| } | ||||
| 
 | ||||
| func NewPool(cap int) *Pool { | ||||
| 	return &Pool{} | ||||
| } | ||||
							
								
								
									
										33
									
								
								Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb/util/pool_legacy.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb/util/pool_legacy.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,33 +0,0 @@ | ||||
| // Copyright (c) 2014, Suryandaru Triandana <syndtr@gmail.com>
 | ||||
| // All rights reserved.
 | ||||
| //
 | ||||
| // Use of this source code is governed by a BSD-style license that can be
 | ||||
| // found in the LICENSE file.
 | ||||
| 
 | ||||
| // +build !go1.3
 | ||||
| 
 | ||||
| package util | ||||
| 
 | ||||
| type Pool struct { | ||||
| 	pool chan interface{} | ||||
| } | ||||
| 
 | ||||
| func (p *Pool) Get() interface{} { | ||||
| 	select { | ||||
| 	case x := <-p.pool: | ||||
| 		return x | ||||
| 	default: | ||||
| 		return nil | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (p *Pool) Put(x interface{}) { | ||||
| 	select { | ||||
| 	case p.pool <- x: | ||||
| 	default: | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func NewPool(cap int) *Pool { | ||||
| 	return &Pool{pool: make(chan interface{}, cap)} | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user