Skip to content

Commit 46bc967

Browse files
committed
Revert "Move lock to global scope"
This reverts commit f2ac98d.
1 parent cde4a95 commit 46bc967

1 file changed

Lines changed: 29 additions & 35 deletions

File tree

magic/__init__.py

Lines changed: 29 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ def __init__(
109109
self.flags |= MAGIC_NO_CHECK_SIMH
110110

111111
self.cookie = magic_open(self.flags)
112+
self.lock = threading.Lock()
112113

113114
magic_load(self.cookie, magic_file)
114115

@@ -137,31 +138,34 @@ def from_buffer(self, buf):
137138
"""
138139
Identify the contents of `buf`
139140
"""
140-
try:
141-
# if we're on python3, convert buf to bytes
142-
# otherwise this string is passed as wchar*
143-
# which is not what libmagic expects
144-
# NEXTBREAK: only take bytes
145-
if type(buf) == str and str != bytes:
146-
buf = buf.encode("utf-8", errors="replace")
147-
return maybe_decode(magic_buffer(self.cookie, buf))
148-
except MagicException as e:
149-
return self._handle509Bug(e)
141+
with self.lock:
142+
try:
143+
# if we're on python3, convert buf to bytes
144+
# otherwise this string is passed as wchar*
145+
# which is not what libmagic expects
146+
# NEXTBREAK: only take bytes
147+
if type(buf) == str and str != bytes:
148+
buf = buf.encode("utf-8", errors="replace")
149+
return maybe_decode(magic_buffer(self.cookie, buf))
150+
except MagicException as e:
151+
return self._handle509Bug(e)
150152

151153
def from_file(self, filename):
152154
# raise FileNotFoundException or IOError if the file does not exist
153155
os.stat(filename, follow_symlinks=self.flags & MAGIC_SYMLINK)
154156

155-
try:
156-
return maybe_decode(magic_file(self.cookie, filename))
157-
except MagicException as e:
158-
return self._handle509Bug(e)
157+
with self.lock:
158+
try:
159+
return maybe_decode(magic_file(self.cookie, filename))
160+
except MagicException as e:
161+
return self._handle509Bug(e)
159162

160163
def from_descriptor(self, fd):
161-
try:
162-
return maybe_decode(magic_descriptor(self.cookie, fd))
163-
except MagicException as e:
164-
return self._handle509Bug(e)
164+
with self.lock:
165+
try:
166+
return maybe_decode(magic_descriptor(self.cookie, fd))
167+
except MagicException as e:
168+
return self._handle509Bug(e)
165169

166170
def _handle509Bug(self, e):
167171
# libmagic 5.09 has a bug where it might fail to identify the
@@ -313,9 +317,6 @@ def coerce_filename(filename):
313317
return filename
314318

315319

316-
# libmagic is not thread-safe: guard for concurrent calls on a global scope
317-
LOCK = threading.Lock()
318-
319320
magic_open = libmagic.magic_open
320321
magic_open.restype = magic_t
321322
magic_open.argtypes = [c_int]
@@ -339,8 +340,7 @@ def coerce_filename(filename):
339340

340341

341342
def magic_file(cookie, filename):
342-
with LOCK:
343-
return _magic_file(cookie, coerce_filename(filename))
343+
return _magic_file(cookie, coerce_filename(filename))
344344

345345

346346
_magic_buffer = libmagic.magic_buffer
@@ -350,8 +350,7 @@ def magic_file(cookie, filename):
350350

351351

352352
def magic_buffer(cookie, buf):
353-
with LOCK:
354-
return _magic_buffer(cookie, buf, len(buf))
353+
return _magic_buffer(cookie, buf, len(buf))
355354

356355

357356
magic_descriptor = libmagic.magic_descriptor
@@ -366,8 +365,7 @@ def magic_buffer(cookie, buf):
366365

367366

368367
def magic_descriptor(cookie, fd):
369-
with LOCK:
370-
return _magic_descriptor(cookie, fd)
368+
return _magic_descriptor(cookie, fd)
371369

372370

373371
_magic_load = libmagic.magic_load
@@ -377,8 +375,7 @@ def magic_descriptor(cookie, fd):
377375

378376

379377
def magic_load(cookie, filename):
380-
with LOCK:
381-
return _magic_load(cookie, coerce_filename(filename))
378+
return _magic_load(cookie, coerce_filename(filename))
382379

383380

384381
magic_setflags = libmagic.magic_setflags
@@ -411,16 +408,14 @@ def magic_setparam(cookie, param, val):
411408
if not _has_param:
412409
raise NotImplementedError("magic_setparam not implemented")
413410
v = c_size_t(val)
414-
with LOCK:
415-
return _magic_setparam(cookie, param, byref(v))
411+
return _magic_setparam(cookie, param, byref(v))
416412

417413

418414
def magic_getparam(cookie, param):
419415
if not _has_param:
420416
raise NotImplementedError("magic_getparam not implemented")
421417
val = c_size_t()
422-
with LOCK:
423-
_magic_getparam(cookie, param, byref(val))
418+
_magic_getparam(cookie, param, byref(val))
424419
return val.value
425420

426421

@@ -435,8 +430,7 @@ def magic_getparam(cookie, param):
435430
def version():
436431
if not _has_version:
437432
raise NotImplementedError("magic_version not implemented")
438-
with LOCK:
439-
return magic_version()
433+
return magic_version()
440434

441435

442436
MAGIC_NONE = 0x000000 # No flags

0 commit comments

Comments
 (0)