b.wait()
a[:] = c
+ def ass_subscript2(b, a, c): # MODIFIES!
+ b.wait()
+ a[:] = c
+ assert b'\xdd' not in a
+
def mod(b, a):
c = tuple(range(4096))
b.wait()
try: a % c
except TypeError: pass
+ def mod2(b, a, c):
+ b.wait()
+ d = a % c
+ assert b'\xdd' not in d
+
def repr_(b, a):
b.wait()
repr(a)
check([clear] + [contains] * 10)
check([clear] + [subscript] * 10)
+ check([clear2] + [ass_subscript2] * 10, None, bytearray(b'0' * 0x400000))
check([clear] + [mod] * 10, bytearray(b'%d' * 4096))
+ check([clear2] + [mod2] * 10, bytearray(b'%s'), bytearray(b'0' * 0x400000))
check([clear] + [capitalize] * 10, bytearray(b'a' * 0x40000))
check([clear] + [center] * 10, bytearray(b'a' * 0x40000))
bytearray_ass_subscript(PyObject *op, PyObject *index, PyObject *values)
{
int ret;
- Py_BEGIN_CRITICAL_SECTION(op);
- ret = bytearray_ass_subscript_lock_held(op, index, values);
- Py_END_CRITICAL_SECTION();
+ if (values != NULL && PyByteArray_Check(values)) {
+ Py_BEGIN_CRITICAL_SECTION2(op, values);
+ ret = bytearray_ass_subscript_lock_held(op, index, values);
+ Py_END_CRITICAL_SECTION2();
+ }
+ else {
+ Py_BEGIN_CRITICAL_SECTION(op);
+ ret = bytearray_ass_subscript_lock_held(op, index, values);
+ Py_END_CRITICAL_SECTION();
+ }
return ret;
}
bytearray_mod(PyObject *v, PyObject *w)
{
PyObject *ret;
- Py_BEGIN_CRITICAL_SECTION(v);
- ret = bytearray_mod_lock_held(v, w);
- Py_END_CRITICAL_SECTION();
+ if (PyByteArray_Check(w)) {
+ Py_BEGIN_CRITICAL_SECTION2(v, w);
+ ret = bytearray_mod_lock_held(v, w);
+ Py_END_CRITICAL_SECTION2();
+ }
+ else {
+ Py_BEGIN_CRITICAL_SECTION(v);
+ ret = bytearray_mod_lock_held(v, w);
+ Py_END_CRITICAL_SECTION();
+ }
return ret;
}