Welcome! Please see the About page for a little more info on how this works.

0 votes
in core.async by

Chaining together channels apparently leaks memory in Safari.

A statement such as

(def test [input-chan] (map< identity (map< identity (map< identity input-chan))))

will leak memory when the channels are used. The longer the chain the more memory.

I have created an example repository and an example page.

The repo and the example code is here:
https://github.com/bhauman/checkmemleak/blob/master/src/checking_safari_leak/core.cljs

The demonstration page is here:
This link will leak
http://rigsomelight.com/checkmemleak/?leak=true
This link will not
http://rigsomelight.com/checkmemleak

The leak is pretty darn severe.

5 Answers

0 votes
by

Comment made by: bhauman

I have just confirmed this is also a problem in Safari Version 7.0.1 (9537.73.11) on Mavericks.

0 votes
by

Comment made by: bhauman

I updated the example page.

http://rigsomelight.com/checkmemleak/index.html

This link wont leak:
http://rigsomelight.com/checkmemleak/index.html#comp-partial

This link will leak:
http://rigsomelight.com/checkmemleak/index.html#map<

There is navigation to try the different implementations and optimization modes.

To be clear map<-chain, custom-map, map<, and map> all exhibit the leak in :none and simple optimization modes.

0 votes
by

Comment made by: dnolen

To make sure this ticket has all the necessary information - if I remember correctly even advanced optimization is affected? Am I correct Bruce?

0 votes
by

Comment made by: bhauman

Yes, it affected advanced optimization. I haven't checked if this is still an issue.

0 votes
by
Reference: https://clojure.atlassian.net/browse/ASYNC-51 (reported by bhauman)
...