iceberg icon indicating copy to clipboard operation
iceberg copied to clipboard

"There is no free space in this collection!" during IceGitLocalBranch>>commit

Open chisandrei opened this issue 3 years ago • 0 comments

We are getting some crashes on the CI from time to time when running tests that trigger a There is no free space in this collection! error. There seem to be some concurrent accesses to a WeakSet from FFIMethodRegistry. Could not reproduce this locally and do not have any more info at the moment.

This is the same error as in the issue https://github.com/pharo-project/pharo/issues/6524. It look like somehow there is a race condition when accessing the WeakSet from FFIMethodRegistry.

Currently this happens on Pharo 8 latest version with latest version of Iceberg from the branch dev-1.6. Not sure if there were some fixes related to this in a newer version of Iceberg.

[31mError: There is no free space in this collection!
[0mWeakSet(Object)>>error:
WeakSet(HashedCollection)>>errorNoFreeSpace
WeakSet>>scanFor:
WeakSet>>add:
FFIMethodRegistry>>registerMethod:
LGitSafeFFICalloutAPI(FFICalloutAPI)>>function:library:
LGitSafeFFICalloutAPI(FFICalloutAPI)>>function:module:
LGitRepository(LGitExternalObject)>>call:options:
LGitRepository>>branch_lookup:branch_name:branch_type:
[ self
	branch_lookup: reference
	branch_name: name
	branch_type: branchType ] in LGitRepository>>lookupBranch:type: in Block: [ self...
LGitRepository(LGitExternalObject)>>withReturnHandlerDo:
LGitRepository>>lookupBranch:type:
LGitRepository>>lookupLocalBranch:
[ | gitCommit gitId |
gitId := (self repositoryHandle lookupLocalBranch: self name) targetId.
gitCommit := LGitCommit of: self repositoryHandle fromId: gitId.
^ self repository commitFromGitCommit: gitCommit ] in IceGitLocalBranch>>commit in Block: [ | gitCommit gitId |...
BlockClosure>>on:do:
IceLibgitRepository>>handleLibgitError:
IceGitLocalBranch>>commit
IcePackage>>latestVersion
[ :package | 
GoferResolvedReference
	name: package latestVersion info name
	repository: self ] in IceMetacelloRepositoryAdapter>>goferReferences in Block: [ :package | ...
Array(SequenceableCollection)>>collect:
IceMetacelloRepositoryAdapter>>goferReferences
[ aRepository goferReferences asSortedCollection asArray ] in MetacelloGofer(Gofer)>>basicReferencesIn: in Block: [ aRepository goferReferences asSortedCollection a...etc...
BlockClosure>>on:do:
MetacelloGofer(Gofer)>>basicReferencesIn:
[ :cache | ^ cache at: aRepository put: (super basicReferencesIn: aRepository) ] in MetacelloGofer>>basicReferencesIn: in Block: [ :cache | ^ cache at: aRepository put: (super bas...etc...
[ :dict | 
| cache |
cache := dict at: cacheName ifAbsent: [  ].
cache ~~ nil
	ifTrue: [ | value hasEntry |
		hasEntry := true.
		value := cache at: key ifAbsent: [ hasEntry := false ].
		hasEntry
			ifTrue: [ ^ value ] ]
	ifFalse: [ cache := cacheClass new.
		dict at: cacheName put: cache ].
^ aBlock value: cache ] in IceMetacelloPharoPlatform(MetacelloPlatform)>>stackCacheFor:cacheClass:at:doing: in Block: [ :dict | ...
[ ^ aBlock value: dict ] in IceMetacelloPharoPlatform(MetacelloPlatform)>>useStackCacheDuring:defaultDictionary: in Block: [ ^ aBlock value: dict ]
BlockClosure>>on:do:
IceMetacelloPharoPlatform(MetacelloPlatform)>>useStackCacheDuring:defaultDictionary:
IceMetacelloPharoPlatform(MetacelloPlatform)>>stackCacheFor:cacheClass:at:doing:

chisandrei avatar Sep 30 '20 14:09 chisandrei