Don't we need the de-register this on topic change or when the layer is removed from the map?

I also think that probably JavaScript closure keeps olLayer infinitely, which results in memory leak.