Piotr Caban : msvcp120: Fix function passed to _Concurrent_vector_base_v4: :_Internal_clear.

Alexandre Julliard julliard at winehq.org
Thu Jun 14 16:53:23 CDT 2018


Module: wine
Branch: master
Commit: 905aa3cb0df31eb645c0d81d0b274dbb6c7a7f48
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=905aa3cb0df31eb645c0d81d0b274dbb6c7a7f48

Author: Piotr Caban <piotr at 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 at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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)




More information about the wine-cvs mailing list