summaryrefslogtreecommitdiff
path: root/src/client/scripts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2020-11-01 11:57:34 +0900
committersyuilo <syuilotan@yahoo.co.jp>2020-11-01 11:57:34 +0900
commitc055b4d32dbe719134228f13cb711ce5d11d5525 (patch)
tree4e893fb49cac494a6c77330bd6a8232759c15ccf /src/client/scripts
parentタスクマネージャー(wip) (diff)
downloadsharkey-c055b4d32dbe719134228f13cb711ce5d11d5525.tar.gz
sharkey-c055b4d32dbe719134228f13cb711ce5d11d5525.tar.bz2
sharkey-c055b4d32dbe719134228f13cb711ce5d11d5525.zip
fix(client): ストリーミングのメモリリークを修正
SharedConnection や NonSharedConnection のインスタンスを Vue コンポーネントの data に含むと、Vue が Proxy に変換するため、Stream クラス内部でインスタンス同士の比較をしても false になり、使われなくなったインスタンスがメモリ上に残り続ける。 なお、チャンネルへの接続/切断は頻繁に行うものではないため、メモリリークといっても影響は軽微とみられる。
Diffstat (limited to 'src/client/scripts')
-rw-r--r--src/client/scripts/stream.ts5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/client/scripts/stream.ts b/src/client/scripts/stream.ts
index 942e2a8daa..7330a2f8bb 100644
--- a/src/client/scripts/stream.ts
+++ b/src/client/scripts/stream.ts
@@ -1,6 +1,7 @@
import autobind from 'autobind-decorator';
import { EventEmitter } from 'eventemitter3';
import ReconnectingWebsocket from 'reconnecting-websocket';
+import { markRaw } from 'vue';
import { debug, wsUrl } from '@/config';
import { query as urlQuery } from '../../prelude/url';
@@ -36,7 +37,7 @@ export default class Stream extends EventEmitter {
this.sharedConnectionPools.push(pool);
}
- const connection = new SharedConnection(this, channel, pool, name);
+ const connection = markRaw(new SharedConnection(this, channel, pool, name));
this.sharedConnections.push(connection);
return connection;
}
@@ -53,7 +54,7 @@ export default class Stream extends EventEmitter {
@autobind
public connectToChannel(channel: string, params?: any): NonSharedConnection {
- const connection = new NonSharedConnection(this, channel, params);
+ const connection = markRaw(new NonSharedConnection(this, channel, params));
this.nonSharedConnections.push(connection);
return connection;
}