Module: wine Branch: master Commit: 905aa3cb0df31eb645c0d81d0b274dbb6c7a7f48 URL: https://source.winehq.org/git/wine.git/?a=commit;h=905aa3cb0df31eb645c0d81d0...
Author: Piotr Caban piotr@codeweavers.com Date: Thu Jun 14 12:38:56 2018 +0200
msvcp120: Fix function passed to _Concurrent_vector_base_v4::_Internal_clear.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/msvcp120/tests/msvcp120.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/dlls/msvcp120/tests/msvcp120.c b/dlls/msvcp120/tests/msvcp120.c index 969902d..65f445f 100644 --- a/dlls/msvcp120/tests/msvcp120.c +++ b/dlls/msvcp120/tests/msvcp120.c @@ -36,7 +36,7 @@ struct expect_struct { DEFINE_EXPECT(queue_char__Copy_item); DEFINE_EXPECT(queue_char__Assign_and_destroy_item); DEFINE_EXPECT(concurrent_vector_int_alloc); - DEFINE_EXPECT(concurrent_vector_int_free); + DEFINE_EXPECT(concurrent_vector_int_destroy); };
#define SET_EXPECT(func) \ @@ -2454,10 +2454,10 @@ static void* __cdecl concurrent_vector_int_alloc(vector_base_v4 *this, size_t n) return malloc(n*sizeof(int)); }
-static void __cdecl concurrent_vector_int_free(void *ptr, size_t n) +static void __cdecl concurrent_vector_int_destroy(void *ptr, size_t n) { - CHECK_EXPECT2(concurrent_vector_int_free); - free(ptr); + CHECK_EXPECT2(concurrent_vector_int_destroy); + memset(ptr, 0xff, sizeof(int)*n); }
static void concurrent_vector_int_ctor(vector_base_v4 *this) @@ -2467,6 +2467,20 @@ static void concurrent_vector_int_ctor(vector_base_v4 *this) this->segment = &this->storage[0]; }
+static void concurrent_vector_int_dtor(vector_base_v4 *this) +{ + size_t blocks; + + blocks = (size_t)call_func2(p_vector_base_v4__Internal_clear, + this, concurrent_vector_int_destroy); + while(this->first_block && blocks >= this->first_block) { + free(this->segment[blocks - this->first_block]); + blocks--; + } + + call_func1(p_vector_base_v4_dtor, this); +} + static void test_queue_base_v4(void) { queue_base_v4 queue; @@ -2731,16 +2745,16 @@ static void test_vector_base_v4(void) size = (size_t)call_func1(p_vector_base_v4__Internal_capacity, &vector); ok(size == 8, "size of vector got %ld expected 8\n", (long)size);
- SET_EXPECT(concurrent_vector_int_free); + SET_EXPECT(concurrent_vector_int_destroy); size = (size_t)call_func2(p_vector_base_v4__Internal_clear, - &vector, concurrent_vector_int_free); - CHECK_CALLED(concurrent_vector_int_free); + &vector, concurrent_vector_int_destroy); + CHECK_CALLED(concurrent_vector_int_destroy); ok(size == 3, "_Internal_clear returned %ld\n", (long)size); ok(vector.first_block == 1, "vector.first_block got %ld expected 1\n", (long)vector.first_block); ok(vector.early_size == 0, "vector.early_size got %ld expected 0\n", (long)vector.early_size); - call_func1(p_vector_base_v4_dtor, &vector); + concurrent_vector_int_dtor(&vector); }
START_TEST(msvcp120)