Ignore:
Timestamp:
Dec 29, 2008, 8:54:36 AM (12 years ago)
Author:
charles
Message:

(trunk libT) avoid some unnecessary memory fragmentation... for composited objects that have a tr_ptrArray, contain the tr_ptrArray directly rather than a pointer to one allocated elsewhere on the heap.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/bencode.c

    r7404 r7524  
    327327{
    328328    int           err;
    329     tr_ptrArray * parentStack = tr_ptrArrayNew( );
     329    tr_ptrArray   parentStack = TR_PTR_ARRAY_INIT;
    330330
    331331    top->type = 0; /* set to `uninitialized' */
    332     err = tr_bencParseImpl( buf, end, top, parentStack, setme_end );
     332    err = tr_bencParseImpl( buf, end, top, &parentStack, setme_end );
    333333    if( err )
    334334        tr_bencFree( top );
    335335
    336     tr_ptrArrayFree( parentStack, NULL );
     336    tr_ptrArrayDestruct( &parentStack, NULL );
    337337    return err;
    338338}
     
    933933          void *             user_data )
    934934{
    935     tr_ptrArray * stack = tr_ptrArrayNew( );
    936 
    937     tr_ptrArrayAppend( stack, nodeNew( top ) );
    938 
    939     while( !tr_ptrArrayEmpty( stack ) )
    940     {
    941         struct SaveNode * node = tr_ptrArrayBack( stack );
     935    tr_ptrArray stack = TR_PTR_ARRAY_INIT;
     936
     937    tr_ptrArrayAppend( &stack, nodeNew( top ) );
     938
     939    while( !tr_ptrArrayEmpty( &stack ) )
     940    {
     941        struct SaveNode * node = tr_ptrArrayBack( &stack );
    942942        const tr_benc *   val;
    943943
     
    956956            if( isContainer( node->val ) )
    957957                walkFuncs->containerEndFunc( node->val, user_data );
    958             tr_ptrArrayPop( stack );
     958            tr_ptrArrayPop( &stack );
    959959            tr_free( node->children );
    960960            tr_free( node );
     
    974974                case TYPE_LIST:
    975975                    if( val != node->val )
    976                         tr_ptrArrayAppend( stack, nodeNew( val ) );
     976                        tr_ptrArrayAppend( &stack, nodeNew( val ) );
    977977                    else
    978978                        walkFuncs->listBeginFunc( val, user_data );
     
    981981                case TYPE_DICT:
    982982                    if( val != node->val )
    983                         tr_ptrArrayAppend( stack, nodeNew( val ) );
     983                        tr_ptrArrayAppend( &stack, nodeNew( val ) );
    984984                    else
    985985                        walkFuncs->dictBeginFunc( val, user_data );
     
    993993    }
    994994
    995     tr_ptrArrayFree( stack, NULL );
     995    tr_ptrArrayDestruct( &stack, NULL );
    996996}
    997997
     
    10881088    if( val && val->type )
    10891089    {
    1090         tr_ptrArray *    freeme = tr_ptrArrayNew( );
     1090        tr_ptrArray a = TR_PTR_ARRAY_INIT;
    10911091        struct WalkFuncs walkFuncs;
    10921092
     
    10961096        walkFuncs.listBeginFunc = freeContainerBeginFunc;
    10971097        walkFuncs.containerEndFunc = freeDummyFunc;
    1098         bencWalk( val, &walkFuncs, freeme );
    1099 
    1100         tr_ptrArrayFree( freeme, tr_free );
     1098        bencWalk( val, &walkFuncs, &a );
     1099
     1100        tr_ptrArrayDestruct( &a, tr_free );
    11011101    }
    11021102}
Note: See TracChangeset for help on using the changeset viewer.