Clean cached asar archives when quitting.

This commit is contained in:
Cheng Zhao 2014-09-25 21:49:01 +08:00
parent d559275711
commit 05317ad81e
2 changed files with 17 additions and 4 deletions

View file

@ -75,6 +75,11 @@ class Archive : public mate::Wrappable {
return mate::ConvertToV8(isolate, new_path);
}
// Free the resources used by archive.
void Destroy() {
archive_.reset();
}
// mate::Wrappable:
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(v8::Isolate* isolate) {
return mate::ObjectTemplateBuilder(isolate)
@ -82,7 +87,8 @@ class Archive : public mate::Wrappable {
.SetMethod("getFileInfo", &Archive::GetFileInfo)
.SetMethod("stat", &Archive::Stat)
.SetMethod("readdir", &Archive::Readdir)
.SetMethod("copyFileOut", &Archive::CopyFileOut);
.SetMethod("copyFileOut", &Archive::CopyFileOut)
.SetMethod("destroy", &Archive::Destroy);
}
private:

View file

@ -6,12 +6,19 @@ util = require 'util'
# Cache asar archive objects.
cachedArchives = {}
getOrCreateArchive = (p) ->
unless cachedArchives[p]?
cachedArchives[p] = asar.createArchive p
cachedArchives[p]
archive = cachedArchives[p]
return archive if archive?
archive = asar.createArchive p
return false unless archive
cachedArchives[p] = archive
# Clean cache on quit.
process.on 'exit', ->
archive.destroy() for p, archive of cachedArchives
# Separate asar package's path from full path.
splitPath = (p) ->
return [false, p] unless typeof p is 'string'
components = p.split path.sep
for c, i in components by -1
if path.extname(c) is '.asar'