Ignore:
Timestamp:
Nov 6, 2015 4:18:46 AM (6 years ago)
Author:
nanang
Message:

Close #1894: Improve ioqueue performance on multithreadeded environment.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib/src/pj/ioqueue_common_abs.c

    r4890 r5194  
    196196 * framework. 
    197197 */ 
    198 void ioqueue_dispatch_write_event(pj_ioqueue_t *ioqueue, pj_ioqueue_key_t *h) 
    199 { 
    200     /* Lock the key. */ 
    201     pj_ioqueue_lock_key(h); 
     198pj_bool_t ioqueue_dispatch_write_event( pj_ioqueue_t *ioqueue, 
     199                                        pj_ioqueue_key_t *h) 
     200{ 
     201    pj_status_t rc; 
     202 
     203    /* Try lock the key. */ 
     204    rc = pj_ioqueue_trylock_key(h); 
     205    if (rc != PJ_SUCCESS) { 
     206        return PJ_FALSE; 
     207    } 
    202208 
    203209    if (IS_CLOSING(h)) { 
    204210        pj_ioqueue_unlock_key(h); 
    205         return; 
     211        return PJ_TRUE; 
    206212    } 
    207213 
     
    418424         */ 
    419425        pj_ioqueue_unlock_key(h); 
    420     } 
    421 } 
    422  
    423 void ioqueue_dispatch_read_event( pj_ioqueue_t *ioqueue, pj_ioqueue_key_t *h ) 
     426 
     427        return PJ_FALSE; 
     428    } 
     429 
     430    return PJ_TRUE; 
     431} 
     432 
     433pj_bool_t ioqueue_dispatch_read_event( pj_ioqueue_t *ioqueue, 
     434                                       pj_ioqueue_key_t *h ) 
    424435{ 
    425436    pj_status_t rc; 
    426437 
    427     /* Lock the key. */ 
    428     pj_ioqueue_lock_key(h); 
     438    /* Try lock the key. */ 
     439    rc = pj_ioqueue_trylock_key(h); 
     440    if (rc != PJ_SUCCESS) { 
     441        return PJ_FALSE; 
     442    } 
    429443 
    430444    if (IS_CLOSING(h)) { 
    431445        pj_ioqueue_unlock_key(h); 
    432         return; 
     446        return PJ_TRUE; 
    433447    } 
    434448 
     
    605619         */ 
    606620        pj_ioqueue_unlock_key(h); 
    607     } 
    608 } 
    609  
    610  
    611 void ioqueue_dispatch_exception_event( pj_ioqueue_t *ioqueue,  
    612                                        pj_ioqueue_key_t *h ) 
     621 
     622        return PJ_FALSE; 
     623    } 
     624 
     625    return PJ_TRUE; 
     626} 
     627 
     628 
     629pj_bool_t ioqueue_dispatch_exception_event( pj_ioqueue_t *ioqueue, 
     630                                            pj_ioqueue_key_t *h ) 
    613631{ 
    614632    pj_bool_t has_lock; 
    615  
    616     pj_ioqueue_lock_key(h); 
     633    pj_status_t rc; 
     634 
     635    /* Try lock the key. */ 
     636    rc = pj_ioqueue_trylock_key(h); 
     637    if (rc != PJ_SUCCESS) { 
     638        return PJ_FALSE; 
     639    } 
    617640 
    618641    if (!h->connecting) { 
     
    622645         */ 
    623646        pj_ioqueue_unlock_key(h); 
    624         return; 
     647        return PJ_TRUE; 
    625648    } 
    626649 
    627650    if (IS_CLOSING(h)) { 
    628651        pj_ioqueue_unlock_key(h); 
    629         return; 
     652        return PJ_TRUE; 
    630653    } 
    631654 
     
    669692        pj_ioqueue_unlock_key(h); 
    670693    } 
     694 
     695    return PJ_TRUE; 
    671696} 
    672697 
     
    13251350} 
    13261351 
     1352PJ_DEF(pj_status_t) pj_ioqueue_trylock_key(pj_ioqueue_key_t *key) 
     1353{ 
     1354    if (key->grp_lock) 
     1355        return pj_grp_lock_tryacquire(key->grp_lock); 
     1356    else 
     1357        return pj_lock_tryacquire(key->lock); 
     1358} 
     1359 
    13271360PJ_DEF(pj_status_t) pj_ioqueue_unlock_key(pj_ioqueue_key_t *key) 
    13281361{ 
Note: See TracChangeset for help on using the changeset viewer.