瀏覽代碼

Use sync.Map for cached C strings

DarthSim 3 年之前
父節點
當前提交
7d77f0afd3
共有 2 個文件被更改,包括 7 次插入4 次删除
  1. 2 0
      CHANGELOG.md
  2. 5 4
      vips/cached_c_strings.go

+ 2 - 0
CHANGELOG.md

@@ -1,6 +1,8 @@
 # Changelog
 
 ## [Unreleased]
+### Fix
+- Fix crashes in some scenarios.
 
 ## [3.1.0] - 2021-12-08
 ### Added

+ 5 - 4
vips/cached_c_strings.go

@@ -1,16 +1,17 @@
 package vips
 
 import "C"
+import "sync"
 
-var cStringsCache = make(map[string]*C.char)
+var cStringsCache sync.Map
 
 func cachedCString(str string) *C.char {
-	if cstr, ok := cStringsCache[str]; ok {
-		return cstr
+	if cstr, ok := cStringsCache.Load(str); ok {
+		return cstr.(*C.char)
 	}
 
 	cstr := C.CString(str)
-	cStringsCache[str] = cstr
+	cStringsCache.Store(str, cstr)
 
 	return cstr
 }