@@ -335,6 +335,59 @@ TEST_P(umfIpcTest, AllocFreeAllocTest) {
335335 EXPECT_EQ (stat.openCount , stat.closeCount );
336336}
337337
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+
338391TEST_P (umfIpcTest, ConcurrentGetPutHandles) {
339392 std::vector<void *> ptrs;
340393 constexpr size_t ALLOC_SIZE = 100 ;
0 commit comments