diff options
author | bptato <nincsnevem662@gmail.com> | 2024-07-20 15:28:35 +0200 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2024-07-20 15:31:55 +0200 |
commit | 7cafa1f5e0f1e83ec5064764284433d64e94cc9f (patch) | |
tree | 97e10041df5a6d58a6a7f77538b81d3d1c8a3729 /src/local | |
parent | 4183fbf5bc53e4208df443f343f97ab466384e21 (diff) | |
download | chawan-7cafa1f5e0f1e83ec5064764284433d64e94cc9f.tar.gz |
loader: copy cached items on buffer cloning
This fixes a bug where cloning buffers with images would crash the browser.
Diffstat (limited to 'src/local')
-rw-r--r-- | src/local/client.nim | 3 | ||||
-rw-r--r-- | src/local/container.nim | 3 | ||||
-rw-r--r-- | src/local/pager.nim | 6 |
3 files changed, 8 insertions, 4 deletions
diff --git a/src/local/client.nim b/src/local/client.nim index 60910bc8..97390528 100644 --- a/src/local/client.nim +++ b/src/local/client.nim @@ -406,7 +406,8 @@ proc acceptBuffers(client: Client) = if stream == nil: pager.alert("Error: failed to set up buffer") continue - let key = pager.addLoaderClient(container.process, container.loaderConfig) + let key = pager.addLoaderClient(container.process, container.loaderConfig, + container.clonedFrom) let loader = pager.loader stream.withPacketWriter w: w.swrite(key) diff --git a/src/local/container.nim b/src/local/container.nim index a103e7a8..9dc9d552 100644 --- a/src/local/container.nim +++ b/src/local/container.nim @@ -135,6 +135,7 @@ type bpos: seq[CursorPosition] highlights: seq[Highlight] process* {.jsget.}: int + clonedFrom*: int loadinfo*: string lines: SimpleFlexibleGrid lineshift: int @@ -479,6 +480,7 @@ proc newContainer*(config: BufferConfig; loaderConfig: LoaderClientConfig; loadinfo: "Connecting to " & request.url.host & "...", cacheId: cacheId, process: -1, + clonedFrom: -1, mainConfig: mainConfig, flags: flags, luctx: luctx, @@ -515,6 +517,7 @@ proc clone*(container: Container; newurl: URL; loader: FileLoader): nc[] = container[] nc.url = url nc.process = pid + nc.clonedFrom = container.process nc.flags.incl(cfCloned) nc.retry = @[] nc.parent = nil diff --git a/src/local/pager.nim b/src/local/pager.nim index c77d724b..6430416f 100644 --- a/src/local/pager.nim +++ b/src/local/pager.nim @@ -341,10 +341,10 @@ proc genClientKey(pager: Pager): ClientKey = pager.devRandom.recvDataLoop(key) return key -proc addLoaderClient*(pager: Pager; pid: int; config: LoaderClientConfig): - ClientKey = +proc addLoaderClient*(pager: Pager; pid: int; config: LoaderClientConfig; + clonedFrom = -1): ClientKey = var key = pager.genClientKey() - while unlikely(not pager.loader.addClient(key, pid, config)): + while unlikely(not pager.loader.addClient(key, pid, config, clonedFrom)): key = pager.genClientKey() return key |