place-channel-put: value not allowed in a message
prints out just the invalid object, not the whole message
This commit is contained in:
parent
078540b17c
commit
2de9de9b26
|
@ -5,6 +5,10 @@
|
||||||
(place-wait (place/base (p1 ch)
|
(place-wait (place/base (p1 ch)
|
||||||
(printf "Hello from place\n")))
|
(printf "Hello from place\n")))
|
||||||
|
|
||||||
|
(let ()
|
||||||
|
(define-values (in out) (place-channel))
|
||||||
|
(err/rt-test (place-channel-put in (string->uninterned-symbol "invalid"))))
|
||||||
|
|
||||||
|
|
||||||
(let ([p (place/base (p1 ch)
|
(let ([p (place/base (p1 ch)
|
||||||
(printf "Hello form place 2\n")
|
(printf "Hello form place 2\n")
|
||||||
|
|
|
@ -78,7 +78,8 @@ static void destroy_place_object_locks(Scheme_Place_Object *place_obj);
|
||||||
#if defined(MZ_USE_PLACES) && defined(MZ_PRECISE_GC)
|
#if defined(MZ_USE_PLACES) && defined(MZ_PRECISE_GC)
|
||||||
static Scheme_Object *places_deep_copy_worker(Scheme_Object *so, Scheme_Hash_Table **ht,
|
static Scheme_Object *places_deep_copy_worker(Scheme_Object *so, Scheme_Hash_Table **ht,
|
||||||
int mode, int gcable, int can_raise_exn,
|
int mode, int gcable, int can_raise_exn,
|
||||||
Scheme_Object **master_chain);
|
Scheme_Object **master_chain,
|
||||||
|
Scheme_Object **invalid_object);
|
||||||
# define mzPDC_CHECK 0
|
# define mzPDC_CHECK 0
|
||||||
# define mzPDC_COPY 1
|
# define mzPDC_COPY 1
|
||||||
# define mzPDC_UNCOPY 2
|
# define mzPDC_UNCOPY 2
|
||||||
|
@ -1068,18 +1069,19 @@ static Scheme_Object *place_p(int argc, Scheme_Object *args[])
|
||||||
}
|
}
|
||||||
|
|
||||||
static Scheme_Object *do_places_deep_copy(Scheme_Object *so, int mode, int gcable,
|
static Scheme_Object *do_places_deep_copy(Scheme_Object *so, int mode, int gcable,
|
||||||
Scheme_Object **master_chain)
|
Scheme_Object **master_chain,
|
||||||
|
Scheme_Object **invalid_object)
|
||||||
{
|
{
|
||||||
#if defined(MZ_USE_PLACES) && defined(MZ_PRECISE_GC)
|
#if defined(MZ_USE_PLACES) && defined(MZ_PRECISE_GC)
|
||||||
Scheme_Hash_Table *ht = NULL;
|
Scheme_Hash_Table *ht = NULL;
|
||||||
return places_deep_copy_worker(so, &ht, mode, gcable, gcable, master_chain);
|
return places_deep_copy_worker(so, &ht, mode, gcable, gcable, master_chain, invalid_object);
|
||||||
#else
|
#else
|
||||||
return so;
|
return so;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
Scheme_Object *places_deep_uncopy(Scheme_Object *so) {
|
Scheme_Object *places_deep_uncopy(Scheme_Object *so) {
|
||||||
return do_places_deep_copy(so, mzPDC_UNCOPY, 1, NULL);
|
return do_places_deep_copy(so, mzPDC_UNCOPY, 1, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bad_place_message(Scheme_Object *so) {
|
static void bad_place_message(Scheme_Object *so) {
|
||||||
|
@ -1101,7 +1103,7 @@ static void bad_place_message2(Scheme_Object *so, Scheme_Object *o, int can_rais
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (SCHEME_VEC_ELS(v)[1]) {
|
if (SCHEME_VEC_ELS(v)[1]) {
|
||||||
l = SCHEME_VEC_ELS(v)[0];
|
l = SCHEME_VEC_ELS(v)[1];
|
||||||
while (SCHEME_PAIRP(l)) {
|
while (SCHEME_PAIRP(l)) {
|
||||||
scheme_close_socket_fd(SCHEME_INT_VAL(SCHEME_CAR(l)));
|
scheme_close_socket_fd(SCHEME_INT_VAL(SCHEME_CAR(l)));
|
||||||
l = SCHEME_CDR(l);
|
l = SCHEME_CDR(l);
|
||||||
|
@ -1161,7 +1163,8 @@ static Scheme_Object *trivial_copy(Scheme_Object *so, Scheme_Object **master_cha
|
||||||
static Scheme_Object *shallow_types_copy(Scheme_Object *so, Scheme_Hash_Table *ht,
|
static Scheme_Object *shallow_types_copy(Scheme_Object *so, Scheme_Hash_Table *ht,
|
||||||
Scheme_Object **fd_accumulators, intptr_t *delayed_errno,
|
Scheme_Object **fd_accumulators, intptr_t *delayed_errno,
|
||||||
int mode, int can_raise_exn,
|
int mode, int can_raise_exn,
|
||||||
Scheme_Object **master_chain) {
|
Scheme_Object **master_chain,
|
||||||
|
Scheme_Object **invalid_object) {
|
||||||
Scheme_Object *new_so;
|
Scheme_Object *new_so;
|
||||||
int copy_mode = ((mode == mzPDC_COPY) || (mode == mzPDC_UNCOPY));
|
int copy_mode = ((mode == mzPDC_COPY) || (mode == mzPDC_UNCOPY));
|
||||||
|
|
||||||
|
@ -1204,8 +1207,8 @@ static Scheme_Object *shallow_types_copy(Scheme_Object *so, Scheme_Hash_Table *h
|
||||||
Scheme_Object *d;
|
Scheme_Object *d;
|
||||||
n = scheme_rational_numerator(so);
|
n = scheme_rational_numerator(so);
|
||||||
d = scheme_rational_denominator(so);
|
d = scheme_rational_denominator(so);
|
||||||
n = shallow_types_copy(n, NULL, fd_accumulators, delayed_errno, mode, can_raise_exn, master_chain);
|
n = shallow_types_copy(n, NULL, fd_accumulators, delayed_errno, mode, can_raise_exn, master_chain, invalid_object);
|
||||||
d = shallow_types_copy(d, NULL, fd_accumulators, delayed_errno, mode, can_raise_exn, master_chain);
|
d = shallow_types_copy(d, NULL, fd_accumulators, delayed_errno, mode, can_raise_exn, master_chain, invalid_object);
|
||||||
new_so = scheme_make_rational(n, d);
|
new_so = scheme_make_rational(n, d);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1223,8 +1226,8 @@ static Scheme_Object *shallow_types_copy(Scheme_Object *so, Scheme_Hash_Table *h
|
||||||
Scheme_Object *i;
|
Scheme_Object *i;
|
||||||
r = scheme_complex_real_part(so);
|
r = scheme_complex_real_part(so);
|
||||||
i = scheme_complex_imaginary_part(so);
|
i = scheme_complex_imaginary_part(so);
|
||||||
r = shallow_types_copy(r, NULL, fd_accumulators, delayed_errno, mode, can_raise_exn, master_chain);
|
r = shallow_types_copy(r, NULL, fd_accumulators, delayed_errno, mode, can_raise_exn, master_chain, invalid_object);
|
||||||
i = shallow_types_copy(i, NULL, fd_accumulators, delayed_errno, mode, can_raise_exn, master_chain);
|
i = shallow_types_copy(i, NULL, fd_accumulators, delayed_errno, mode, can_raise_exn, master_chain, invalid_object);
|
||||||
new_so = scheme_make_complex(r, i);
|
new_so = scheme_make_complex(r, i);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1250,6 +1253,7 @@ static Scheme_Object *shallow_types_copy(Scheme_Object *so, Scheme_Hash_Table *h
|
||||||
case scheme_symbol_type:
|
case scheme_symbol_type:
|
||||||
if (SCHEME_SYM_UNINTERNEDP(so)) {
|
if (SCHEME_SYM_UNINTERNEDP(so)) {
|
||||||
bad_place_message2(so, *fd_accumulators, can_raise_exn);
|
bad_place_message2(so, *fd_accumulators, can_raise_exn);
|
||||||
|
if (invalid_object) *invalid_object = so;
|
||||||
return NULL;
|
return NULL;
|
||||||
} else {
|
} else {
|
||||||
if (mode == mzPDC_COPY) {
|
if (mode == mzPDC_COPY) {
|
||||||
|
@ -1314,17 +1318,18 @@ static Scheme_Object *shallow_types_copy(Scheme_Object *so, Scheme_Hash_Table *h
|
||||||
SCHEME_CPTR_FLAGS(o) |= 0x1;
|
SCHEME_CPTR_FLAGS(o) |= 0x1;
|
||||||
SCHEME_CPTR_VAL(o) = SCHEME_CPTR_VAL(so);
|
SCHEME_CPTR_VAL(o) = SCHEME_CPTR_VAL(so);
|
||||||
o2 = shallow_types_copy(SCHEME_CPTR_TYPE(so), NULL, fd_accumulators, delayed_errno, mode,
|
o2 = shallow_types_copy(SCHEME_CPTR_TYPE(so), NULL, fd_accumulators, delayed_errno, mode,
|
||||||
can_raise_exn, master_chain);
|
can_raise_exn, master_chain, invalid_object);
|
||||||
SCHEME_CPTR_TYPE(o) = o2;
|
SCHEME_CPTR_TYPE(o) = o2;
|
||||||
|
|
||||||
new_so = o;
|
new_so = o;
|
||||||
} else {
|
} else {
|
||||||
(void)shallow_types_copy(SCHEME_CPTR_TYPE(so), NULL, fd_accumulators, delayed_errno, mode,
|
(void)shallow_types_copy(SCHEME_CPTR_TYPE(so), NULL, fd_accumulators, delayed_errno, mode,
|
||||||
can_raise_exn, master_chain);
|
can_raise_exn, master_chain, invalid_object);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
bad_place_message2(so, *fd_accumulators, can_raise_exn);
|
bad_place_message2(so, *fd_accumulators, can_raise_exn);
|
||||||
|
if (invalid_object) *invalid_object = so;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1355,7 +1360,8 @@ static Scheme_Object *shallow_types_copy(Scheme_Object *so, Scheme_Hash_Table *h
|
||||||
ssfd->type = so->type;
|
ssfd->type = so->type;
|
||||||
ssfd->fd = dupfd;
|
ssfd->fd = dupfd;
|
||||||
portname = scheme_port_name(so);
|
portname = scheme_port_name(so);
|
||||||
tmp = shallow_types_copy(portname, ht, fd_accumulators, delayed_errno, mode, can_raise_exn, master_chain);
|
tmp = shallow_types_copy(portname, ht, fd_accumulators, delayed_errno, mode, can_raise_exn,
|
||||||
|
master_chain, invalid_object);
|
||||||
ssfd->name = tmp;
|
ssfd->name = tmp;
|
||||||
return (Scheme_Object *)ssfd;
|
return (Scheme_Object *)ssfd;
|
||||||
}
|
}
|
||||||
|
@ -1370,7 +1376,7 @@ static Scheme_Object *shallow_types_copy(Scheme_Object *so, Scheme_Hash_Table *h
|
||||||
sffd->so.type = scheme_serialized_file_fd_type;
|
sffd->so.type = scheme_serialized_file_fd_type;
|
||||||
scheme_get_serialized_fd_flags(so, sffd);
|
scheme_get_serialized_fd_flags(so, sffd);
|
||||||
tmp = shallow_types_copy(scheme_port_name(so), ht, fd_accumulators, delayed_errno, mode,
|
tmp = shallow_types_copy(scheme_port_name(so), ht, fd_accumulators, delayed_errno, mode,
|
||||||
can_raise_exn, master_chain);
|
can_raise_exn, master_chain, invalid_object);
|
||||||
sffd->name = tmp;
|
sffd->name = tmp;
|
||||||
dupfd = scheme_dup_file(fd);
|
dupfd = scheme_dup_file(fd);
|
||||||
if (dupfd == -1) {
|
if (dupfd == -1) {
|
||||||
|
@ -1391,11 +1397,13 @@ static Scheme_Object *shallow_types_copy(Scheme_Object *so, Scheme_Hash_Table *h
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
bad_place_message2(so, *fd_accumulators, can_raise_exn);
|
bad_place_message2(so, *fd_accumulators, can_raise_exn);
|
||||||
|
if (invalid_object) *invalid_object = so;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
bad_place_message2(so, *fd_accumulators, can_raise_exn);
|
bad_place_message2(so, *fd_accumulators, can_raise_exn);
|
||||||
|
if (invalid_object) *invalid_object = so;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1627,7 +1635,8 @@ static MZ_INLINE Scheme_Object *inf_get(Scheme_Object **instack, int pos, uintpt
|
||||||
for recursion. */
|
for recursion. */
|
||||||
static Scheme_Object *places_deep_copy_worker(Scheme_Object *so, Scheme_Hash_Table **ht,
|
static Scheme_Object *places_deep_copy_worker(Scheme_Object *so, Scheme_Hash_Table **ht,
|
||||||
int mode, int gcable, int can_raise_exn,
|
int mode, int gcable, int can_raise_exn,
|
||||||
Scheme_Object **master_chain) {
|
Scheme_Object **master_chain,
|
||||||
|
Scheme_Object **invalid_object) {
|
||||||
Scheme_Object *inf_stack = NULL;
|
Scheme_Object *inf_stack = NULL;
|
||||||
Scheme_Object *reg0 = NULL;
|
Scheme_Object *reg0 = NULL;
|
||||||
uintptr_t inf_stack_depth = 0, inf_max_depth = 0;
|
uintptr_t inf_stack_depth = 0, inf_max_depth = 0;
|
||||||
|
@ -1672,7 +1681,8 @@ static Scheme_Object *places_deep_copy_worker(Scheme_Object *so, Scheme_Hash_Tab
|
||||||
int ctr = 0;
|
int ctr = 0;
|
||||||
|
|
||||||
/* First, check for simple values that don't need to be hashed: */
|
/* First, check for simple values that don't need to be hashed: */
|
||||||
new_so = shallow_types_copy(so, *ht, &fd_accumulators, &delayed_errno, mode, can_raise_exn, master_chain);
|
new_so = shallow_types_copy(so, *ht, &fd_accumulators, &delayed_errno, mode, can_raise_exn, master_chain,
|
||||||
|
invalid_object);
|
||||||
if (new_so) return new_so;
|
if (new_so) return new_so;
|
||||||
|
|
||||||
if (*ht) {
|
if (*ht) {
|
||||||
|
@ -1710,7 +1720,7 @@ DEEP_DO:
|
||||||
}
|
}
|
||||||
|
|
||||||
new_so = shallow_types_copy(so, *ht, &fd_accumulators, &delayed_errno, mode,
|
new_so = shallow_types_copy(so, *ht, &fd_accumulators, &delayed_errno, mode,
|
||||||
can_raise_exn, master_chain);
|
can_raise_exn, master_chain, invalid_object);
|
||||||
if (new_so) RETURN;
|
if (new_so) RETURN;
|
||||||
new_so = so;
|
new_so = so;
|
||||||
|
|
||||||
|
@ -1820,12 +1830,14 @@ DEEP_VEC2:
|
||||||
|
|
||||||
if (!stype->prefab_key) {
|
if (!stype->prefab_key) {
|
||||||
bad_place_message2(so, fd_accumulators, can_raise_exn);
|
bad_place_message2(so, fd_accumulators, can_raise_exn);
|
||||||
|
if (invalid_object) *invalid_object = so;
|
||||||
new_so = NULL;
|
new_so = NULL;
|
||||||
ABORT;
|
ABORT;
|
||||||
}
|
}
|
||||||
for (i = 0; i < local_slots; i++) {
|
for (i = 0; i < local_slots; i++) {
|
||||||
if (!stype->immutables || stype->immutables[i] != 1) {
|
if (!stype->immutables || stype->immutables[i] != 1) {
|
||||||
bad_place_message2(so, fd_accumulators, can_raise_exn);
|
bad_place_message2(so, fd_accumulators, can_raise_exn);
|
||||||
|
if (invalid_object) *invalid_object = so;
|
||||||
new_so = NULL;
|
new_so = NULL;
|
||||||
ABORT;
|
ABORT;
|
||||||
}
|
}
|
||||||
|
@ -1953,6 +1965,7 @@ DEEP_SST2_L:
|
||||||
if (delayed_errno)
|
if (delayed_errno)
|
||||||
scheme_warning("Error serializing place message: %e", delayed_errno);
|
scheme_warning("Error serializing place message: %e", delayed_errno);
|
||||||
bad_place_message2(so, fd_accumulators, can_raise_exn);
|
bad_place_message2(so, fd_accumulators, can_raise_exn);
|
||||||
|
if (invalid_object) *invalid_object = so;
|
||||||
new_so = NULL;
|
new_so = NULL;
|
||||||
ABORT;
|
ABORT;
|
||||||
break;
|
break;
|
||||||
|
@ -2387,23 +2400,24 @@ Scheme_Object *places_deep_copy_to_master(Scheme_Object *so) {
|
||||||
void *original_gc;
|
void *original_gc;
|
||||||
|
|
||||||
/* forces hash codes: */
|
/* forces hash codes: */
|
||||||
(void)places_deep_copy_worker(so, &ht, mzPDC_CHECK, 1, 1, NULL);
|
(void)places_deep_copy_worker(so, &ht, mzPDC_CHECK, 1, 1, NULL, NULL);
|
||||||
ht = NULL;
|
ht = NULL;
|
||||||
|
|
||||||
original_gc = GC_switch_to_master_gc();
|
original_gc = GC_switch_to_master_gc();
|
||||||
scheme_start_atomic();
|
scheme_start_atomic();
|
||||||
|
|
||||||
o = places_deep_copy_worker(so, &ht, mzPDC_COPY, 1, 0, NULL);
|
o = places_deep_copy_worker(so, &ht, mzPDC_COPY, 1, 0, NULL, NULL);
|
||||||
|
|
||||||
scheme_end_atomic_no_swap();
|
scheme_end_atomic_no_swap();
|
||||||
GC_switch_back_from_master(original_gc);
|
GC_switch_back_from_master(original_gc);
|
||||||
return o;
|
return o;
|
||||||
#else
|
#else
|
||||||
return places_deep_copy_worker(so, &ht, mzPDC_COPY, 1, 1, NULL);
|
return places_deep_copy_worker(so, &ht, mzPDC_COPY, 1, 1, NULL, NULL);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static Scheme_Object *places_serialize(Scheme_Object *so, void **msg_memory, Scheme_Object **master_chain) {
|
static Scheme_Object *places_serialize(Scheme_Object *so, void **msg_memory, Scheme_Object **master_chain,
|
||||||
|
Scheme_Object **invalid_object) {
|
||||||
#if defined(MZ_USE_PLACES) && defined(MZ_PRECISE_GC)
|
#if defined(MZ_USE_PLACES) && defined(MZ_PRECISE_GC)
|
||||||
Scheme_Object *new_so;
|
Scheme_Object *new_so;
|
||||||
Scheme_Object *tmp;
|
Scheme_Object *tmp;
|
||||||
|
@ -2412,7 +2426,7 @@ static Scheme_Object *places_serialize(Scheme_Object *so, void **msg_memory, Sch
|
||||||
if (new_so) return new_so;
|
if (new_so) return new_so;
|
||||||
|
|
||||||
GC_create_message_allocator();
|
GC_create_message_allocator();
|
||||||
new_so = do_places_deep_copy(so, mzPDC_COPY, 0, master_chain);
|
new_so = do_places_deep_copy(so, mzPDC_COPY, 0, master_chain, invalid_object);
|
||||||
tmp = GC_finish_message_allocator();
|
tmp = GC_finish_message_allocator();
|
||||||
(*msg_memory) = tmp;
|
(*msg_memory) = tmp;
|
||||||
return new_so;
|
return new_so;
|
||||||
|
@ -2430,13 +2444,13 @@ Scheme_Object *scheme_places_deserialize(Scheme_Object *so, void *msg_memory) {
|
||||||
|
|
||||||
/* small messages are deemed to be < 1k, this could be tuned in either direction */
|
/* small messages are deemed to be < 1k, this could be tuned in either direction */
|
||||||
if (GC_message_objects_size(msg_memory) < 1024) {
|
if (GC_message_objects_size(msg_memory) < 1024) {
|
||||||
new_so = do_places_deep_copy(so, mzPDC_UNCOPY, 1, NULL);
|
new_so = do_places_deep_copy(so, mzPDC_UNCOPY, 1, NULL, NULL);
|
||||||
GC_dispose_short_message_allocator(msg_memory);
|
GC_dispose_short_message_allocator(msg_memory);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
GC_adopt_message_allocator(msg_memory);
|
GC_adopt_message_allocator(msg_memory);
|
||||||
#if !defined(SHARED_TABLES)
|
#if !defined(SHARED_TABLES)
|
||||||
new_so = do_places_deep_copy(so, mzPDC_DESER, 1, NULL);
|
new_so = do_places_deep_copy(so, mzPDC_DESER, 1, NULL, NULL);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return new_so;
|
return new_so;
|
||||||
|
@ -2481,7 +2495,7 @@ static Scheme_Object* place_allowed_p(int argc, Scheme_Object *args[])
|
||||||
{
|
{
|
||||||
Scheme_Hash_Table *ht = NULL;
|
Scheme_Hash_Table *ht = NULL;
|
||||||
|
|
||||||
if (places_deep_copy_worker(args[0], &ht, mzPDC_CHECK, 1, 0, NULL))
|
if (places_deep_copy_worker(args[0], &ht, mzPDC_CHECK, 1, 0, NULL, NULL))
|
||||||
return scheme_true;
|
return scheme_true;
|
||||||
else
|
else
|
||||||
return scheme_false;
|
return scheme_false;
|
||||||
|
@ -2554,7 +2568,7 @@ static void async_channel_finalize(void *p, void* data) {
|
||||||
for (i = 0; i < ch->size ; i++) {
|
for (i = 0; i < ch->size ; i++) {
|
||||||
ht = NULL;
|
ht = NULL;
|
||||||
if (ch->msgs[i]) {
|
if (ch->msgs[i]) {
|
||||||
(void)places_deep_copy_worker(ch->msgs[i], &ht, mzPDC_CLEAN, 0, 0, NULL);
|
(void)places_deep_copy_worker(ch->msgs[i], &ht, mzPDC_CLEAN, 0, 0, NULL, NULL);
|
||||||
ch->msgs[i] = NULL;
|
ch->msgs[i] = NULL;
|
||||||
}
|
}
|
||||||
#ifdef MZ_PRECISE_GC
|
#ifdef MZ_PRECISE_GC
|
||||||
|
@ -2699,12 +2713,15 @@ static Scheme_Object *GC_master_make_vector(int size) {
|
||||||
|
|
||||||
static void place_async_send(Scheme_Place_Async_Channel *ch, Scheme_Object *uo) {
|
static void place_async_send(Scheme_Place_Async_Channel *ch, Scheme_Object *uo) {
|
||||||
void *msg_memory = NULL;
|
void *msg_memory = NULL;
|
||||||
Scheme_Object *o, *master_chain = NULL;
|
Scheme_Object *o, *master_chain = NULL, *invalid_object = NULL;
|
||||||
intptr_t sz;
|
intptr_t sz;
|
||||||
int cnt;
|
int cnt;
|
||||||
|
|
||||||
o = places_serialize(uo, &msg_memory, &master_chain);
|
o = places_serialize(uo, &msg_memory, &master_chain, &invalid_object);
|
||||||
if (!o) bad_place_message(uo);
|
if (!o) {
|
||||||
|
if (invalid_object) bad_place_message(invalid_object);
|
||||||
|
else bad_place_message(uo);
|
||||||
|
}
|
||||||
|
|
||||||
mzrt_mutex_lock(ch->lock);
|
mzrt_mutex_lock(ch->lock);
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user