void test_handles ( void ) { rList handles = NULL; rSequence handle = NULL; RU32 nHandles = 0; RU32 nNamedHandles = 0; RPWCHAR handleName = NULL; handles = processLib_getHandles( 0, FALSE, NULL ); CU_ASSERT_PTR_NOT_EQUAL_FATAL( handles, NULL ); while( rList_getSEQUENCE( handles, RP_TAGS_HANDLE_INFO, &handle ) ) { nHandles++; } CU_ASSERT_TRUE( 100 < nHandles ); rList_free( handles ); handles = processLib_getHandles( 0, TRUE, NULL ); CU_ASSERT_PTR_NOT_EQUAL_FATAL( handles, NULL ); while( rList_getSEQUENCE( handles, RP_TAGS_HANDLE_INFO, &handle ) ) { nNamedHandles++; CU_ASSERT_TRUE( rSequence_getSTRINGW( handle, RP_TAGS_HANDLE_NAME, &handleName ) ); CU_ASSERT_TRUE( 0 != rpal_string_strlenw( handleName ) ); } CU_ASSERT_TRUE( nNamedHandles < nHandles ); rList_free( handles ); }
RPRIVATE RVOID mem_handles ( rpcm_tag eventType, rSequence event ) { RU32 pid; rList handleList; RPU8 atom = NULL; RU32 atomSize = 0; UNREFERENCED_PARAMETER( eventType ); if( rpal_memory_isValid( event ) ) { if( rSequence_getRU32( event, RP_TAGS_PROCESS_ID, &pid ) || ( rSequence_getBUFFER( event, RP_TAGS_HBS_THIS_ATOM, &atom, &atomSize ) && HBS_ATOM_ID_SIZE == atomSize && 0 != ( pid = atoms_getPid( atom ) ) ) ) { if( NULL != ( handleList = processLib_getHandles( pid, TRUE, NULL ) ) ) { if( !rSequence_addLIST( event, RP_TAGS_HANDLES, handleList ) ) { rList_free( handleList ); } } else { rSequence_addRU32( event, RP_TAGS_ERROR, rpal_error_getLast() ); } } hbs_timestampEvent( event, 0 ); hbs_publish( RP_TAGS_NOTIFICATION_MEM_HANDLES_REP, event ); } }
RPRIVATE RVOID mem_find_handle ( rpcm_tag eventType, rSequence event ) { RPNCHAR needle = NULL; rList handleList; UNREFERENCED_PARAMETER( eventType ); if( rpal_memory_isValid( event ) ) { if( rSequence_getSTRINGN( event, RP_TAGS_HANDLE_NAME, &needle ) ) { rSequence_unTaintRead( event ); if( NULL != ( handleList = processLib_getHandles( 0, TRUE, needle ) ) ) { if( !rSequence_addLIST( event, RP_TAGS_HANDLES, handleList ) ) { rList_free( handleList ); } } else { rSequence_addRU32( event, RP_TAGS_ERROR, rpal_error_getLast() ); rpal_debug_error( "failed to get handles for pid 0x%x.", 0 ); } } hbs_timestampEvent( event, 0 ); hbs_publish( RP_TAGS_NOTIFICATION_MEM_FIND_HANDLE_REP, event ); } }