pike.git/
src/
array.c
Branch:
Tag:
Non-build tags
All tags
No tags
2006-04-02
2006-04-02 17:19:17 by Henrik Grubbström (Grubba) <grubba@grubba.org>
fc6274300285a1e1a8313cab0b3d5849833ce97a (
28
lines) (+
13
/-
15
)
[
Show
|
Annotate
]
Branch:
7.9
Cleaned up previous fix.
Fixed race condition in apply_array().
Rev: src/array.c:1.190
2:
|| This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information.
-
|| $Id: array.c,v 1.
189
2006/04/02 17:
07
:
45
grubba Exp $
+
|| $Id: array.c,v 1.
190
2006/04/02 17:
19
:
17
grubba Exp $
*/ #include "global.h"
2289:
hash = hash * 33 + (INT32)Pike_sp[-e-1].u.ptr; if (!(cycl = (struct array *)BEGIN_CYCLIC(a, (ptrdiff_t)hash))) {
-
ONERROR err;
-
aa = allocate_array(a->size)
;
-
SET_ONERROR(err, do_free_array, aa
);
-
for (e=0; e<a->size; e++)
+
push_array(
aa = allocate_array
_no_init
(
0,
a->size));
+
for (e=0;
(
e<a->size
) && (e < aa->malloced_size)
; e++)
{ assign_svalues_no_free(Pike_sp, argp, args, BIT_MIXED); Pike_sp+=args;
2300:
apply_svalue(ITEM(a)+e,args); new_types |= 1 << Pike_sp[-1].type; assign_svalue_no_free(ITEM(aa)+e, &Pike_sp[-1]);
+
aa->size = e;
pop_stack(); } aa->type_field = new_types; #ifdef PIKE_DEBUG array_check_type_field(aa); #endif
-
pop_n_elems
(args);
-
UNSET
_
ONERROR(err);
-
push
_
array
(
aa
);
+
stack_
pop_n_elems_
keep
_
top
(
args
);
} else { pop_n_elems(args);