iceberg
iceberg copied to clipboard
"There is no free space in this collection!" during IceGitLocalBranch>>commit
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: