@@ -335,6 +335,59 @@ TEST_P(umfIpcTest, AllocFreeAllocTest) {
335
335
EXPECT_EQ (stat.openCount , stat.closeCount );
336
336
}
337
337
338
+ TEST_P (umfIpcTest, openInTwoPools) {
339
+ constexpr size_t SIZE = 100 ;
340
+ std::vector<int > expected_data (SIZE);
341
+ umf::pool_unique_handle_t pool1 = makePool ();
342
+ umf::pool_unique_handle_t pool2 = makePool ();
343
+ void *ptr = umfPoolMalloc (pool1.get (), sizeof (expected_data[0 ]) * SIZE);
344
+ EXPECT_NE (ptr, nullptr );
345
+
346
+ std::iota (expected_data.begin (), expected_data.end (), 0 );
347
+ memAccessor->copy (ptr, expected_data.data (), SIZE * sizeof (int ));
348
+
349
+ umf_ipc_handle_t ipcHandle = nullptr ;
350
+ size_t handleSize = 0 ;
351
+ umf_result_t ret = umfGetIPCHandle (ptr, &ipcHandle, &handleSize);
352
+ ASSERT_EQ (ret, UMF_RESULT_SUCCESS);
353
+
354
+ void *openedPtr1 = nullptr ;
355
+ ret = umfOpenIPCHandle (pool1.get (), ipcHandle, &openedPtr1);
356
+ ASSERT_EQ (ret, UMF_RESULT_SUCCESS);
357
+
358
+ void *openedPtr2 = nullptr ;
359
+ ret = umfOpenIPCHandle (pool2.get (), ipcHandle, &openedPtr2);
360
+ ASSERT_EQ (ret, UMF_RESULT_SUCCESS);
361
+
362
+ ret = umfPutIPCHandle (ipcHandle);
363
+ EXPECT_EQ (ret, UMF_RESULT_SUCCESS);
364
+
365
+ std::vector<int > actual_data (SIZE);
366
+ memAccessor->copy (actual_data.data (), openedPtr1, SIZE * sizeof (int ));
367
+ ASSERT_TRUE (std::equal (expected_data.begin (), expected_data.end (),
368
+ actual_data.begin ()));
369
+
370
+ ret = umfCloseIPCHandle (openedPtr1);
371
+ EXPECT_EQ (ret, UMF_RESULT_SUCCESS);
372
+
373
+ memAccessor->copy (actual_data.data (), openedPtr2, SIZE * sizeof (int ));
374
+ ASSERT_TRUE (std::equal (expected_data.begin (), expected_data.end (),
375
+ actual_data.begin ()));
376
+
377
+ ret = umfCloseIPCHandle (openedPtr2);
378
+ EXPECT_EQ (ret, UMF_RESULT_SUCCESS);
379
+
380
+ ret = umfPoolFree (pool1.get (), ptr);
381
+ EXPECT_EQ (ret, UMF_RESULT_SUCCESS);
382
+
383
+ pool1.reset (nullptr );
384
+ pool2.reset (nullptr );
385
+ EXPECT_EQ (stat.getCount , 1 );
386
+ EXPECT_EQ (stat.putCount , stat.getCount );
387
+ EXPECT_EQ (stat.openCount , 2 );
388
+ EXPECT_EQ (stat.closeCount , stat.openCount );
389
+ }
390
+
338
391
TEST_P (umfIpcTest, ConcurrentGetPutHandles) {
339
392
std::vector<void *> ptrs;
340
393
constexpr size_t ALLOC_SIZE = 100 ;
0 commit comments