Changeset 8596

Show
Ignore:
Timestamp:
10/26/10 17:03:26 (3 years ago)
Author:
shuangy
Message:

1. fix two memory leaks in fee_object_attr and decode_release. 2. clean sys-mkdir and acache.

Location:
branches/Orange-Elaine-Distr-Dir-Branch/src
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/acache.c

    r8492 r8596  
    7171    PVFS_handle *mirror_dfile_array; 
    7272    uint32_t mirror_copies_count; 
    73     /* 
    74     PVFS_handle *dirent_handle; 
    75     uint32_t dirent_file_count; 
    76     */ 
    77     /* distributed directory parameters */ 
    78     PVFS_dist_dir_attr dist_dir_attr; 
    79     PVFS_dist_dir_bitmap dist_dir_bitmap; 
    80     PVFS_handle *dirdata_handles; 
    8173}; 
    8274   
     
    457449            attr->u.meta.dist_size = tmp_static_payload->dist_size; 
    458450        } 
    459         if(tmp_static_payload->mask & PVFS_ATTR_DIR_DISTDIR_ATTR) 
    460         { 
    461             uint32_t tmp_i; 
    462             /* test if num_servers > 0 */ 
    463  
    464             if(attr->u.dir.dist_dir_bitmap) 
    465             { 
    466                 free(attr->u.dir.dist_dir_bitmap); 
    467                 attr->u.dir.dist_dir_bitmap = NULL; 
    468             } 
    469             if(attr->u.dir.dirdata_handles) 
    470             { 
    471                 free(attr->u.dir.dirdata_handles); 
    472                 attr->u.dir.dirdata_handles = NULL; 
    473             } 
    474  
    475             if(tmp_static_payload->dist_dir_attr.num_servers == 0) 
    476             { /* no dirdata servers, for debug */ 
    477                 gen_mutex_unlock(&acache_mutex); 
    478                 return(0); /* ??? not sure */ 
    479             } 
    480  
    481             /* copy dist_dir_attr */ 
    482             PINT_dist_dir_attr_copyto(attr->u.dir.dist_dir_attr, 
    483                 tmp_static_payload->dist_dir_attr); 
    484  
    485             attr->u.dir.dist_dir_bitmap = 
    486                 malloc(tmp_static_payload->dist_dir_attr.bitmap_size *  
    487                         sizeof(PVFS_dist_dir_bitmap_basetype)); 
    488             attr->u.dir.dirdata_handles = 
    489                 malloc(tmp_static_payload->dist_dir_attr.num_servers * 
    490                         sizeof(PVFS_handle)); 
    491             if (!attr->u.dir.dist_dir_bitmap || !attr->u.dir.dirdata_handles) 
    492             { 
    493                 gen_mutex_unlock(&acache_mutex); 
    494                 return(-PVFS_ENOMEM); 
    495             } 
    496             memcpy(attr->u.dir.dist_dir_bitmap, 
    497                    tmp_static_payload->dist_dir_bitmap, 
    498                    tmp_static_payload->dist_dir_attr.bitmap_size *  
    499                    sizeof(PVFS_dist_dir_bitmap_basetype)); 
    500             memcpy(attr->u.dir.dirdata_handles, 
    501                    tmp_static_payload->dirdata_handles, 
    502                    tmp_static_payload->dist_dir_attr.num_servers *  
    503                    sizeof(PVFS_handle)); 
    504  
    505 /* !!! change later */ 
    506             gossip_debug(GOSSIP_ACACHE_DEBUG, "acache: get_cached_entry(): dirdata_count=%d\n", attr->u.dir.dist_dir_attr.num_servers); 
    507             for (tmp_i=0; tmp_i < attr->u.dir.dist_dir_attr.num_servers; tmp_i++) 
    508             { 
    509                 gossip_debug(GOSSIP_ACACHE_DEBUG, "                           dirdata_handle[%d]=%llu\n", tmp_i, llu(attr->u.dir.dirdata_handles[tmp_i])); 
    510             } 
    511         } 
    512451 
    513452        *attr_status = 0; 
     
    708647            tmp_static_payload->dist_size = attr->u.meta.dist_size; 
    709648        } 
    710         if(attr->mask & PVFS_ATTR_DIR_DISTDIR_ATTR) 
    711         { 
    712             uint32_t tmp_i; 
    713  
    714             if(attr->u.dir.dist_dir_attr.num_servers == 0) 
    715             { /* empty dist-dir structure, not going to store, only in development phase */ 
    716                 ret = -PVFS_ENOMEM; /* temporarily */ 
    717                 goto err; 
    718             } 
    719  
    720             /* change gossip format later */ 
    721             gossip_debug(GOSSIP_ACACHE_DEBUG, "acache: update(): dirdata_count=%d\n",  
    722                     attr->u.dir.dist_dir_attr.num_servers); 
    723             for (tmp_i=0; tmp_i < attr->u.dir.dist_dir_attr.num_servers; tmp_i++) 
    724             { 
    725                 gossip_debug(GOSSIP_ACACHE_DEBUG, "                  dirdata_handle[%d]=%llu\n", tmp_i, llu(attr->u.dir.dirdata_handles[tmp_i])); 
    726             } 
    727   
    728             PINT_dist_dir_attr_copyto(tmp_static_payload->dist_dir_attr,  
    729                     attr->u.dir.dist_dir_attr); 
    730  
    731            tmp_static_payload->dist_dir_bitmap = 
    732                 malloc(attr->u.dir.dist_dir_attr.bitmap_size *  
    733                         sizeof(PVFS_dist_dir_bitmap_basetype)); 
    734            tmp_static_payload->dirdata_handles = 
    735                 malloc(attr->u.dir.dist_dir_attr.num_servers * sizeof(PVFS_handle)); 
    736            if (!tmp_static_payload->dirdata_handles || 
    737                !tmp_static_payload->dist_dir_bitmap ) 
    738            { 
    739                 ret = -PVFS_ENOMEM; 
    740                 goto err; 
    741            } 
    742            memcpy(tmp_static_payload->dirdata_handles, 
    743                  attr->u.dir.dirdata_handles, 
    744                  attr->u.dir.dist_dir_attr.num_servers * sizeof(PVFS_handle)); 
    745            memcpy(tmp_static_payload->dist_dir_bitmap, 
    746                  attr->u.dir.dist_dir_bitmap, 
    747                  attr->u.dir.dist_dir_attr.bitmap_size *  
    748                  sizeof(PVFS_dist_dir_bitmap_basetype)); 
    749         } 
    750649    } 
    751650 
     
    816715        if(tmp_static_payload->mirror_dfile_array) 
    817716            free(tmp_static_payload->mirror_dfile_array); 
    818         if(tmp_static_payload->dist_dir_bitmap) 
    819             free(tmp_static_payload->dist_dir_bitmap); 
    820         if(tmp_static_payload->dirdata_handles) 
    821             free(tmp_static_payload->dirdata_handles); 
    822717        if(tmp_static_payload->dist) 
    823718            PINT_dist_free(tmp_static_payload->dist); 
     
    918813    { 
    919814        free(tmp_static_payload->mirror_dfile_array); 
    920     } 
    921     if(tmp_static_payload->dist_dir_bitmap) 
    922     { 
    923         free(tmp_static_payload->dist_dir_bitmap); 
    924     } 
    925     if(tmp_static_payload->dirdata_handles) 
    926     { 
    927         free(tmp_static_payload->dirdata_handles); 
    928815    } 
    929816    if(tmp_static_payload->dist) 
  • branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/client-state-machine.h

    r8581 r8596  
    109109    int stored_error_code; 
    110110    PVFS_handle metafile_handle; 
    111  
    112     /* store the dist-dir-struct of the parent directory */ 
    113     /* distributed directory parameters */ 
    114     PVFS_dist_dir_attr dist_dir_attr; 
    115     PVFS_dist_dir_bitmap dist_dir_bitmap; 
    116     PVFS_handle *dirdata_handles; 
    117111 
    118112    /* keep first */ 
  • branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/initialize.c

    r8544 r8596  
    226226    if (ret < 0) 
    227227    { 
    228         gossip_lerr("Error initializing name readdir cache\n"); 
     228        gossip_lerr("Error initializing readdir cache\n"); 
    229229        goto error_exit;         
    230230    }         
  • branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/sys-mkdir.sm

    r8508 r8596  
    424424    dirdata_server_index =  
    425425        PINT_find_dist_dir_bucket(dirdata_hash, 
    426             &sm_p->u.mkdir.dist_dir_attr, 
    427             sm_p->u.mkdir.dist_dir_bitmap); 
     426            &sm_p->getattr.attr.u.dir.dist_dir_attr, 
     427            sm_p->getattr.attr.u.dir.dist_dir_bitmap); 
    428428    gossip_debug(GOSSIP_CLIENT_DEBUG, "mkdir: selecting bucket No.%d from dist_dir_bitmap.\n", 
    429429            dirdata_server_index); 
     
    436436                 llu(sm_p->u.mkdir.metafile_handle), 
    437437                 llu(sm_p->object_ref.handle), 
    438                  llu(sm_p->u.mkdir.dirdata_handles[dirdata_server_index]), 
     438                 llu(sm_p->getattr.attr.u.dir.dirdata_handles[dirdata_server_index]), 
    439439                 dirdata_server_index); 
    440440 
     
    448448        sm_p->u.mkdir.metafile_handle, 
    449449        sm_p->object_ref.handle, 
    450         sm_p->u.mkdir.dirdata_handles[dirdata_server_index], 
     450        sm_p->getattr.attr.u.dir.dirdata_handles[dirdata_server_index], 
    451451        sm_p->object_ref.fs_id, 
    452452        sm_p->hints); 
     
    455455    /* send to dirdata server */ 
    456456    msg_p->handle =  
    457         sm_p->u.mkdir.dirdata_handles[dirdata_server_index]; 
     457        sm_p->getattr.attr.u.dir.dirdata_handles[dirdata_server_index]; 
    458458    msg_p->retry_flag = PVFS_MSGPAIR_NO_RETRY; 
    459459    msg_p->comp_fn = mkdir_crdirent_comp_fn; 
     
    594594    } 
    595595 
    596     if(sm_p->u.mkdir.dist_dir_bitmap) 
    597     { 
    598         free(sm_p->u.mkdir.dist_dir_bitmap); 
    599         sm_p->u.mkdir.dist_dir_bitmap = NULL; 
    600     } 
    601  
    602     if(sm_p->u.mkdir.dirdata_handles) 
    603     { 
    604         free(sm_p->u.mkdir.dirdata_handles); 
    605         sm_p->u.mkdir.dirdata_handles = NULL; 
    606     } 
    607  
    608596    PINT_SET_OP_COMPLETE; 
    609597    return SM_ACTION_TERMINATE; 
     
    647635        /* note that permission checking is left to server even in this case */ 
    648636    } 
    649  
    650     /* ??? necessary? can we use the sm_p->getattr.attr directly? */ 
    651     PINT_dist_dir_attr_copyto(sm_p->u.mkdir.dist_dir_attr, attr->u.dir.dist_dir_attr); 
    652  
    653     sm_p->u.mkdir.dist_dir_bitmap = malloc( 
    654         sizeof(PVFS_dist_dir_bitmap_basetype) * attr->u.dir.dist_dir_attr.bitmap_size); 
    655     sm_p->u.mkdir.dirdata_handles = malloc( 
    656         sizeof(*attr->u.dir.dirdata_handles) * attr->u.dir.dist_dir_attr.num_servers); 
    657     if (!sm_p->u.mkdir.dist_dir_bitmap ||  
    658             !sm_p->u.mkdir.dirdata_handles) 
    659     { 
    660         return -PVFS_ENOMEM; 
    661     } 
    662     memcpy(sm_p->u.mkdir.dist_dir_bitmap, 
    663             attr->u.dir.dist_dir_bitmap, 
    664             sizeof(PVFS_dist_dir_bitmap_basetype) * attr->u.dir.dist_dir_attr.bitmap_size); 
    665     memcpy(sm_p->u.mkdir.dirdata_handles, 
    666            attr->u.dir.dirdata_handles, 
    667            sizeof(*attr->u.dir.dirdata_handles) * attr->u.dir.dist_dir_attr.num_servers); 
    668637 
    669638    /* Determine the number of dirent files. For now just assume we will use 
  • branches/Orange-Elaine-Distr-Dir-Branch/src/common/misc/pint-util.c

    r8544 r8596  
    152152            if (dist_dir_bitmap_size) 
    153153            { 
    154                 if (dest->mask & PVFS_ATTR_DIR_DISTDIR_ATTR) 
     154                if ((dest->mask & PVFS_ATTR_DIR_DISTDIR_ATTR) && 
     155                    dest->u.dir.dist_dir_attr.num_servers > 0) 
    155156                { 
    156157                    if (dest->u.dir.dist_dir_bitmap) 
     
    369370    if (attr) 
    370371    { 
    371         if (attr->objtype == PVFS_TYPE_METAFILE) 
    372         { 
    373             if (attr->mask & PVFS_ATTR_META_DFILES) 
    374             { 
    375                 if (attr->u.meta.dfile_array) 
    376                 { 
    377                     free(attr->u.meta.dfile_array); 
    378                     attr->u.meta.dfile_array = NULL; 
    379                 } 
    380             } 
    381             if (attr->mask & PVFS_ATTR_META_MIRROR_DFILES) 
    382             { 
    383                 if (attr->u.meta.mirror_dfile_array) 
    384                 { 
    385                     free(attr->u.meta.mirror_dfile_array); 
    386                     attr->u.meta.mirror_dfile_array = NULL; 
    387                 } 
    388             } 
    389             if (attr->mask & PVFS_ATTR_META_DIST) 
    390             { 
    391                 if (attr->u.meta.dist) 
    392                 { 
    393                     PINT_dist_free(attr->u.meta.dist); 
    394                     attr->u.meta.dist = NULL; 
    395                 } 
    396             } 
    397         } 
    398         else if (attr->objtype == PVFS_TYPE_SYMLINK) 
    399         { 
    400             if (attr->mask & PVFS_ATTR_SYMLNK_TARGET) 
    401             { 
    402                 if ((attr->u.sym.target_path_len > 0) && 
     372        if (attr->mask & PVFS_ATTR_META_DFILES) 
     373        { 
     374            if (attr->u.meta.dfile_array) 
     375            { 
     376                free(attr->u.meta.dfile_array); 
     377                attr->u.meta.dfile_array = NULL; 
     378            } 
     379        } 
     380        if (attr->mask & PVFS_ATTR_META_MIRROR_DFILES) 
     381        { 
     382            if (attr->u.meta.mirror_dfile_array) 
     383            { 
     384                free(attr->u.meta.mirror_dfile_array); 
     385                attr->u.meta.mirror_dfile_array = NULL; 
     386            } 
     387        } 
     388        if (attr->mask & PVFS_ATTR_META_DIST) 
     389        { 
     390            if (attr->u.meta.dist) 
     391            { 
     392                PINT_dist_free(attr->u.meta.dist); 
     393                attr->u.meta.dist = NULL; 
     394            } 
     395        } 
     396        if (attr->mask & PVFS_ATTR_SYMLNK_TARGET) 
     397        { 
     398            if ((attr->u.sym.target_path_len > 0) && 
    403399                    attr->u.sym.target_path) 
    404                 { 
    405                     free(attr->u.sym.target_path); 
    406                     attr->u.sym.target_path = NULL; 
    407                 } 
    408             } 
    409         } 
    410         else if (attr->objtype == PVFS_TYPE_DIRECTORY) 
    411         { 
    412             if (attr->mask & PVFS_ATTR_DIR_HINT) 
    413             { 
    414                 if (attr->u.dir.hint.dist_name) 
    415                 { 
    416                     free(attr->u.dir.hint.dist_name); 
    417                     attr->u.dir.hint.dist_name = NULL; 
    418                 } 
    419                 if (attr->u.dir.hint.dist_params) 
    420                 { 
    421                     free(attr->u.dir.hint.dist_params); 
    422                     attr->u.dir.hint.dist_params = NULL; 
    423                 } 
    424             } 
    425             if (attr->mask & PVFS_ATTR_DIR_DISTDIR_ATTR) 
    426             { 
    427                 if (attr->u.dir.dist_dir_bitmap) 
    428                 { 
    429                     free(attr->u.dir.dist_dir_bitmap); 
    430                     attr->u.dir.dist_dir_bitmap = NULL; 
    431                 } 
    432                 if (attr->u.dir.dirdata_handles) 
    433                 { 
    434                     free(attr->u.dir.dirdata_handles); 
    435                     attr->u.dir.dirdata_handles = NULL; 
    436                 } 
     400            { 
     401                free(attr->u.sym.target_path); 
     402                attr->u.sym.target_path = NULL; 
     403            } 
     404        } 
     405        if (attr->mask & PVFS_ATTR_DIR_HINT) 
     406        { 
     407            if (attr->u.dir.hint.dist_name) 
     408            { 
     409                free(attr->u.dir.hint.dist_name); 
     410                attr->u.dir.hint.dist_name = NULL; 
     411            } 
     412            if (attr->u.dir.hint.dist_params) 
     413            { 
     414                free(attr->u.dir.hint.dist_params); 
     415                attr->u.dir.hint.dist_params = NULL; 
     416            } 
     417            if (attr->u.dir.dist_dir_bitmap) 
     418            { 
     419                free(attr->u.dir.dist_dir_bitmap); 
     420                attr->u.dir.dist_dir_bitmap = NULL; 
     421            } 
     422            if (attr->u.dir.dirdata_handles) 
     423            { 
     424                free(attr->u.dir.dirdata_handles); 
     425                attr->u.dir.dirdata_handles = NULL; 
    437426            } 
    438427        } 
  • branches/Orange-Elaine-Distr-Dir-Branch/src/proto/PINT-le-bytefield.c

    r8544 r8596  
    10001000                    if (resp->u.getattr.attr.mask & PVFS_ATTR_META_DFILES) 
    10011001                       decode_free(resp->u.getattr.attr.u.meta.dfile_array); 
    1002                     if (   resp->u.getattr.attr.mask  
     1002                    if (resp->u.getattr.attr.mask  
    10031003                         & PVFS_ATTR_META_MIRROR_DFILES )  
    10041004                       decode_free 
    10051005                        (resp->u.getattr.attr.u.meta.mirror_dfile_array); 
     1006                    if (resp->u.getattr.attr.mask  
     1007                         & PVFS_ATTR_DIR_DISTDIR_ATTR)  
     1008                    { 
     1009                       decode_free 
     1010                        (resp->u.getattr.attr.u.dir.dist_dir_bitmap); 
     1011                       decode_free 
     1012                        (resp->u.getattr.attr.u.dir.dirdata_handles); 
     1013                    } 
    10061014                    break; 
    10071015