VirtualBox

Changeset 86420 in vbox for trunk


Ignore:
Timestamp:
Oct 2, 2020 12:28:00 PM (4 years ago)
Author:
vboxsync
Message:

xpcom/TestObserverService: Two asan fixes. Made the testcase exit with non-zero value on failure. bugref:9841

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/libs/xpcom18a4/xpcom/tests/TestObserverService.cpp

    r1 r86420  
    4949static nsIObserverService *anObserverService = NULL;
    5050
     51#ifdef VBOX
     52static bool testResult( nsresult rv ) {
     53    if ( NS_SUCCEEDED( rv ) ) {
     54        printf("...ok\n");
     55        return true;
     56    }
     57    printf("...failed, rv=0x%x\n", (int)rv);
     58    return false;
     59}
     60#else
    5161static void testResult( nsresult rv ) {
    5262    if ( NS_SUCCEEDED( rv ) ) {
     
    5767    return;
    5868}
     69#endif
    5970
    6071void printString(nsString &str) {
     72#ifdef VBOX  /* asan complains about mixing different allocators */
     73    char *cstr = ToNewCString(str);
     74    printf("%s", cstr);
     75    nsMemory::Free(cstr);
     76#else
    6177    const char *cstr = ToNewCString(str);
    6278    printf("%s", cstr);
    6379    delete [] (char*)cstr;
     80#endif
    6481}
    6582
     
    111128                                                 NS_GET_IID(nsIObserverService),
    112129                                                (void **) &anObserverService);
     130#ifdef VBOX
     131    bool fSuccess = res == NS_OK;
     132#endif
    113133       
    114134    if (res == NS_OK) {
     
    121141        printf("Adding Observer-A as observer of topic-A...\n");
    122142        rv = anObserverService->AddObserver(aObserver, topicA.get(), PR_FALSE);
     143#ifdef VBOX
     144        fSuccess = fSuccess &&
     145#endif
    123146        testResult(rv);
    124147 
    125148        printf("Adding Observer-B as observer of topic-A...\n");
    126149        rv = anObserverService->AddObserver(bObserver, topicA.get(), PR_FALSE);
     150#ifdef VBOX
     151        fSuccess = fSuccess &&
     152#endif
    127153        testResult(rv);
    128154 
    129155        printf("Adding Observer-B as observer of topic-B...\n");
    130156        rv = anObserverService->AddObserver(bObserver, topicB.get(), PR_FALSE);
     157#ifdef VBOX
     158        fSuccess = fSuccess &&
     159#endif
    131160        testResult(rv);
    132161
     
    135164                                   topicA.get(),
    136165                                   NS_LITERAL_STRING("Testing Notify(observer-A, topic-A)").get() );
     166#ifdef VBOX
     167        fSuccess = fSuccess &&
     168#endif
    137169        testResult(rv);
    138170
     
    141173                                   topicB.get(),
    142174                                   NS_LITERAL_STRING("Testing Notify(observer-B, topic-B)").get() );
     175#ifdef VBOX
     176        fSuccess = fSuccess &&
     177#endif
    143178        testResult(rv);
    144179 
     
    147182        rv = anObserverService->EnumerateObservers(topicA.get(), getter_AddRefs(e));
    148183
     184#ifdef VBOX
     185        fSuccess = fSuccess &&
     186#endif
    149187        testResult(rv);
    150188
     
    163201                                      topicA.get(),
    164202                                      NS_LITERAL_STRING("during enumeration").get() );
     203#ifdef VBOX
     204              fSuccess = fSuccess &&
     205#endif
    165206              testResult(rv);
    166207          }
     
    170211        printf("Removing Observer-A...\n");
    171212        rv = anObserverService->RemoveObserver(aObserver, topicA.get());
     213#ifdef VBOX
     214        fSuccess = fSuccess &&
     215#endif
    172216        testResult(rv);
    173217
     
    175219        printf("Removing Observer-B (topic-A)...\n");
    176220        rv = anObserverService->RemoveObserver(bObserver, topicB.get());
     221#ifdef VBOX
     222        fSuccess = fSuccess &&
     223#endif
    177224        testResult(rv);
    178225        printf("Removing Observer-B (topic-B)...\n");
    179226        rv = anObserverService->RemoveObserver(bObserver, topicA.get());
    180         testResult(rv);
    181        
    182     }
     227#ifdef VBOX
     228        fSuccess = fSuccess &&
     229#endif
     230        testResult(rv);
     231
     232#ifdef VBOX
     233        /* Cleanup: */
     234        nsrefcnt refs = bObserver->Release();
     235        fSuccess = fSuccess && refs == 0;
     236        if (refs != 0)
     237            printf("bObserver->Release() -> %d, expected 0\n", (int)refs);
     238
     239        refs = aObserver->Release();
     240        fSuccess = fSuccess && refs == 0;
     241        if (refs != 0)
     242            printf("aObserver->Release() -> %d, expected 0\n", (int)refs);
     243#endif
     244    }
     245#ifdef VBOX
     246    return fSuccess ? 0 : 1;
     247#else
    183248    return NS_OK;
    184 }
     249#endif
     250}
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette