Don't create duplicate buffers if a path is opened twice concurrently

This commit is contained in:
Max Brunsfeld
2017-05-23 07:27:56 -07:00
parent ccdbfda0bc
commit 2c2d00a403
2 changed files with 29 additions and 2 deletions

View File

@@ -27,6 +27,7 @@ class Project extends Model
@defaultDirectoryProvider = new DefaultDirectoryProvider()
@repositoryPromisesByPath = new Map()
@repositoryProviders = [new GitRepositoryProvider(this, config)]
@loadPromisesByPath = {}
@consumeServices(packageManager)
destroyed: ->
@@ -42,6 +43,7 @@ class Project extends Model
buffer?.destroy() for buffer in @buffers
@buffers = []
@setPaths([])
@loadPromisesByPath = {}
@consumeServices(packageManager)
destroyUnretainedBuffers: ->
@@ -381,13 +383,19 @@ class Project extends Model
buildBuffer: (absoluteFilePath) ->
params = {shouldDestroyOnFileDelete: @shouldDestroyBufferOnFileDelete}
if absoluteFilePath?
promise = TextBuffer.load(absoluteFilePath, params)
promise =
@loadPromisesByPath[absoluteFilePath] ?=
TextBuffer.load(absoluteFilePath, params).catch (error) =>
delete @loadPromisesByPath[absoluteFilePath]
throw error
else
promise = Promise.resolve(new TextBuffer(params))
promise.then (buffer) =>
delete @loadPromisesByPath[absoluteFilePath]
@addBuffer(buffer)
buffer
addBuffer: (buffer, options={}) ->
@addBufferAtIndex(buffer, @buffers.length, options)