Skip to content

Commit 4043553

Browse files
ddelangeahupp
authored andcommitted
Revert "Move lock to global scope"
This reverts commit f2ac98d.
1 parent f3cef27 commit 4043553

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
@@ -105,6 +105,7 @@ def __init__(
105105
self.flags |= MAGIC_NO_CHECK_SIMH
106106

107107
self.cookie = magic_open(self.flags)
108+
self.lock = threading.Lock()
108109

109110
magic_load(self.cookie, magic_file)
110111

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

147149
def from_file(self, filename):
148150
# raise FileNotFoundException or IOError if the file does not exist
149151
os.stat(filename, follow_symlinks=self.flags & MAGIC_SYMLINK)
150152

151-
try:
152-
return maybe_decode(magic_file(self.cookie, filename))
153-
except MagicException as e:
154-
return self._handle509Bug(e)
153+
with self.lock:
154+
try:
155+
return maybe_decode(magic_file(self.cookie, filename))
156+
except MagicException as e:
157+
return self._handle509Bug(e)
155158

156159
def from_descriptor(self, fd):
157-
try:
158-
return maybe_decode(magic_descriptor(self.cookie, fd))
159-
except MagicException as e:
160-
return self._handle509Bug(e)
160+
with self.lock:
161+
try:
162+
return maybe_decode(magic_descriptor(self.cookie, fd))
163+
except MagicException as e:
164+
return self._handle509Bug(e)
161165

162166
def _handle509Bug(self, e):
163167
# libmagic 5.09 has a bug where it might fail to identify the
@@ -309,9 +313,6 @@ def coerce_filename(filename):
309313
return filename
310314

311315

312-
# libmagic is not thread-safe: guard for concurrent calls on a global scope
313-
LOCK = threading.Lock()
314-
315316
magic_open = libmagic.magic_open
316317
magic_open.restype = magic_t
317318
magic_open.argtypes = [c_int]
@@ -335,8 +336,7 @@ def coerce_filename(filename):
335336

336337

337338
def magic_file(cookie, filename):
338-
with LOCK:
339-
return _magic_file(cookie, coerce_filename(filename))
339+
return _magic_file(cookie, coerce_filename(filename))
340340

341341

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

347347

348348
def magic_buffer(cookie, buf):
349-
with LOCK:
350-
return _magic_buffer(cookie, buf, len(buf))
349+
return _magic_buffer(cookie, buf, len(buf))
351350

352351

353352
magic_descriptor = libmagic.magic_descriptor
@@ -362,8 +361,7 @@ def magic_buffer(cookie, buf):
362361

363362

364363
def magic_descriptor(cookie, fd):
365-
with LOCK:
366-
return _magic_descriptor(cookie, fd)
364+
return _magic_descriptor(cookie, fd)
367365

368366

369367
_magic_load = libmagic.magic_load
@@ -373,8 +371,7 @@ def magic_descriptor(cookie, fd):
373371

374372

375373
def magic_load(cookie, filename):
376-
with LOCK:
377-
return _magic_load(cookie, coerce_filename(filename))
374+
return _magic_load(cookie, coerce_filename(filename))
378375

379376

380377
magic_setflags = libmagic.magic_setflags
@@ -407,16 +404,14 @@ def magic_setparam(cookie, param, val):
407404
if not _has_param:
408405
raise NotImplementedError("magic_setparam not implemented")
409406
v = c_size_t(val)
410-
with LOCK:
411-
return _magic_setparam(cookie, param, byref(v))
407+
return _magic_setparam(cookie, param, byref(v))
412408

413409

414410
def magic_getparam(cookie, param):
415411
if not _has_param:
416412
raise NotImplementedError("magic_getparam not implemented")
417413
val = c_size_t()
418-
with LOCK:
419-
_magic_getparam(cookie, param, byref(val))
414+
_magic_getparam(cookie, param, byref(val))
420415
return val.value
421416

422417

@@ -431,8 +426,7 @@ def magic_getparam(cookie, param):
431426
def version():
432427
if not _has_version:
433428
raise NotImplementedError("magic_version not implemented")
434-
with LOCK:
435-
return magic_version()
429+
return magic_version()
436430

437431

438432
MAGIC_NONE = 0x000000 # No flags

0 commit comments

Comments
 (0)