Skip to content

Commit 397d59d

Browse files
committed
Revert "auto merge of rust-lang#4938 : thestinger/rust/no_zero, r=brson"
This reverts commit 20fd0c5, reversing changes made to af2f0ef. Conflicts: src/libstd/uv_ll.rs
1 parent b88e4f3 commit 397d59d

10 files changed

+43
-11
lines changed

src/libcore/private/exchange_alloc.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use c_malloc = libc::malloc;
1414
use c_free = libc::free;
1515
use managed::raw::{BoxHeaderRepr, BoxRepr};
1616
use cast::transmute;
17-
use ptr::null;
17+
use ptr::{set_memory, null};
1818
use intrinsic::TyDesc;
1919

2020
pub unsafe fn malloc(td: *TypeDesc, size: uint) -> *c_void {
@@ -25,6 +25,10 @@ pub unsafe fn malloc(td: *TypeDesc, size: uint) -> *c_void {
2525
let p = c_malloc(total_size as size_t);
2626
assert p.is_not_null();
2727

28+
// FIXME #4761: Would be very nice to not memset all allocations
29+
let p: *mut u8 = transmute(p);
30+
set_memory(p, 0, total_size);
31+
2832
// FIXME #3475: Converting between our two different tydesc types
2933
let td: *TyDesc = transmute(td);
3034

src/libstd/uv_ll.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1444,15 +1444,15 @@ pub mod test {
14441444
buf_base as uint,
14451445
buf_len as uint,
14461446
nread));
1447-
let bytes = vec::from_buf(buf_base, nread as uint);
1447+
let bytes = vec::from_buf(buf_base, buf_len);
14481448
let request_str = str::from_bytes(bytes);
14491449

14501450
let client_data = get_data_for_uv_handle(
14511451
client_stream_ptr as *libc::c_void) as *tcp_server_data;
14521452

14531453
let server_kill_msg = (*client_data).server_kill_msg;
14541454
let write_req = (*client_data).server_write_req;
1455-
if str::contains(request_str, server_kill_msg) {
1455+
if (str::contains(request_str, server_kill_msg)) {
14561456
log(debug, ~"SERVER: client req contains kill_msg!");
14571457
log(debug, ~"SERVER: sending response to client");
14581458
read_stop(client_stream_ptr);

src/rt/memory_region.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,8 @@ memory_region::realloc(void *mem, size_t orig_size) {
121121
}
122122

123123
void *
124-
memory_region::malloc(size_t size, const char *tag) {
125-
# if RUSTRT_TRACK_ALLOCATIONS >= 1
124+
memory_region::malloc(size_t size, const char *tag, bool zero) {
126125
size_t old_size = size;
127-
# endif
128126
size += HEADER_SIZE;
129127
alloc_header *mem = (alloc_header *)::malloc(size);
130128
if (mem == NULL) {
@@ -145,9 +143,18 @@ memory_region::malloc(size_t size, const char *tag) {
145143
void *data = get_data(mem);
146144
claim_alloc(data);
147145

146+
if(zero) {
147+
memset(data, 0, old_size);
148+
}
149+
148150
return data;
149151
}
150152

153+
void *
154+
memory_region::calloc(size_t size, const char *tag) {
155+
return malloc(size, tag, true);
156+
}
157+
151158
memory_region::~memory_region() {
152159
if (_synchronized) { _lock.lock(); }
153160
if (_live_allocations == 0 && !_detailed_leaks) {

src/rt/memory_region.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ class memory_region {
7777
public:
7878
memory_region(rust_env *env, bool synchronized);
7979
memory_region(memory_region *parent);
80-
void *malloc(size_t size, const char *tag);
80+
void *malloc(size_t size, const char *tag, bool zero = true);
81+
void *calloc(size_t size, const char *tag);
8182
void *realloc(void *mem, size_t size);
8283
void free(void *mem);
8384
~memory_region();

src/rt/rust_exchange_alloc.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,23 @@
1818
uintptr_t exchange_count = 0;
1919

2020
void *
21-
rust_exchange_alloc::malloc(size_t size) {
21+
rust_exchange_alloc::malloc(size_t size, bool zero) {
2222
void *value = ::malloc(size);
2323
assert(value);
24+
if (zero) {
25+
memset(value, 0, size);
26+
}
2427

2528
sync::increment(exchange_count);
2629

2730
return value;
2831
}
2932

33+
void *
34+
rust_exchange_alloc::calloc(size_t size) {
35+
return this->malloc(size);
36+
}
37+
3038
void *
3139
rust_exchange_alloc::realloc(void *ptr, size_t size) {
3240
void *new_ptr = ::realloc(ptr, size);

src/rt/rust_exchange_alloc.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616

1717
class rust_exchange_alloc {
1818
public:
19-
void *malloc(size_t size);
19+
void *malloc(size_t size, bool zero = true);
20+
void *calloc(size_t size);
2021
void *realloc(void *mem, size_t size);
2122
void free(void *mem);
2223
};

src/rt/rust_kernel.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ rust_kernel::malloc(size_t size, const char *tag) {
7979
return exchange_alloc.malloc(size);
8080
}
8181

82+
void *
83+
rust_kernel::calloc(size_t size, const char *tag) {
84+
return exchange_alloc.calloc(size);
85+
}
86+
8287
void *
8388
rust_kernel::realloc(void *mem, size_t size) {
8489
return exchange_alloc.realloc(mem, size);

src/rt/rust_kernel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ class rust_kernel {
132132
void fatal(char const *fmt, ...);
133133

134134
void *malloc(size_t size, const char *tag);
135+
void *calloc(size_t size, const char *tag);
135136
void *realloc(void *mem, size_t size);
136137
void free(void *mem);
137138
rust_exchange_alloc *region() { return &exchange_alloc; }

src/rt/rust_stack.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ check_stack_canary(stk_seg *stk) {
5858
stk_seg *
5959
create_stack(memory_region *region, size_t sz) {
6060
size_t total_sz = sizeof(stk_seg) + sz;
61-
stk_seg *stk = (stk_seg *)region->malloc(total_sz, "stack");
61+
stk_seg *stk = (stk_seg *)region->malloc(total_sz, "stack", false);
6262
memset(stk, 0, sizeof(stk_seg));
6363
stk->end = (uintptr_t) &stk->data[sz];
6464
add_stack_canary(stk);
@@ -75,7 +75,7 @@ destroy_stack(memory_region *region, stk_seg *stk) {
7575
stk_seg *
7676
create_exchange_stack(rust_exchange_alloc *exchange, size_t sz) {
7777
size_t total_sz = sizeof(stk_seg) + sz;
78-
stk_seg *stk = (stk_seg *)exchange->malloc(total_sz);
78+
stk_seg *stk = (stk_seg *)exchange->malloc(total_sz, false);
7979
memset(stk, 0, sizeof(stk_seg));
8080
stk->end = (uintptr_t) &stk->data[sz];
8181
add_stack_canary(stk);

src/rt/rust_task.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,11 @@ rust_task::backtrace() {
450450
#endif
451451
}
452452

453+
void *
454+
rust_task::calloc(size_t size, const char *tag) {
455+
return local_region.calloc(size, tag);
456+
}
457+
453458
size_t
454459
rust_task::get_next_stack_size(size_t min, size_t current, size_t requested) {
455460
LOG(this, mem, "calculating new stack size for 0x%" PRIxPTR, this);

0 commit comments

Comments
 (0)