Ignore:
Timestamp:
Aug 26, 2016, 7:04:49 PM (9 years ago)
Author:
Yuri Dario
Message:

Store samba data in dynamic allocated memory for new caching code. Added
deallocator code. ticket#274.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/client/src/smbwrp.c

    r968 r976  
    730730           strncat(fullname, finfo->fname, sizeof(fullname) - strlen(fullname) -1);
    731731           strncpy(st->finfo.fname, fullname, sizeof(st->finfo.fname));
    732            addFindInfoL(st->pConn, st->plist, &st->finfo, st->ulAttribute, st->dir_mask);
     732           addFindInfoL(st->pConn->pRes, st->plist, &st->finfo, st->ulAttribute, st->dir_mask);
    733733        }
    734734        return;
     
    804804        uint16_t info_level;
    805805        void *dircachectx = NULL;
    806         smbwrp_fileinfo wrpfinfo;
    807806        Resource *pRes = state->pConn->pRes;
    808807
    809808        // Try to get the listing from cache.
    810         if (dircache_list_files(pRes->pdc, fn, state->plist,
    811                                 state->mask, (char*) state->fullpath, &num_finfo))
     809        debuglocal(pRes, 9, "list_files: check cache %s\n", state->fullpath);
     810        if (dircache_list_files(pRes->pdc, addFindInfoCachedL, state->plist,
     811                                state->dir_mask, (char*) state->fullpath, &num_finfo)) {
     812           debuglocal(pRes, 9, "list_files: %s, got %d from cache\n",
     813                        state->fullpath, num_finfo);
    812814           return(num_finfo); // Got from cache
     815        }
    813816
    814817        if (cli_has_async_calls(cli)) {
     
    841844           goto fail;
    842845
    843         dircachectx = dircache_write_begin(pRes->pdc, state->mask,
     846        dircachectx = dircache_write_begin(pRes->pdc, state->dir_mask,
    844847                                           (char*) state->fullpath, num_finfo);
    845848
     
    847850
    848851        for (i=0; i<num_finfo; i++) {
     852           // dinamically allocate finfo data structure, cache can keep only pointers
     853           smbwrp_fileinfo* wrpfinfo = (smbwrp_fileinfo*)malloc( sizeof(smbwrp_fileinfo));
    849854           //as samba and this client have different finfo, we need to convert
    850            memset(&wrpfinfo, 0, sizeof(wrpfinfo));
    851            wrpfinfo.size = finfo[i].size;
    852            wrpfinfo.attr = finfo[i].mode;
    853            wrpfinfo.ctime = convert_timespec_to_time_t(finfo[i].ctime_ts);
    854            wrpfinfo.mtime = convert_timespec_to_time_t(finfo[i].mtime_ts);
    855            wrpfinfo.atime = convert_timespec_to_time_t(finfo[i].atime_ts);
    856            wrpfinfo.easize = finfo[i].easize;
    857            strncpy(wrpfinfo.fname, finfo[i].name, sizeof(wrpfinfo.fname) -1);
    858            fn(cli->dfs_mountpoint, &wrpfinfo, mask, state);
    859            // Also add the entry to the cache.
    860            dircache_write_entry(pRes->pdc, dircachectx, &wrpfinfo);
     855           memset(wrpfinfo, 0, sizeof(smbwrp_fileinfo));
     856           wrpfinfo->size = finfo[i].size;
     857           wrpfinfo->attr = finfo[i].mode;
     858           wrpfinfo->ctime = convert_timespec_to_time_t(finfo[i].ctime_ts);
     859           wrpfinfo->mtime = convert_timespec_to_time_t(finfo[i].mtime_ts);
     860           wrpfinfo->atime = convert_timespec_to_time_t(finfo[i].atime_ts);
     861           wrpfinfo->easize = finfo[i].easize;
     862           strncpy(wrpfinfo->fname, finfo[i].name, sizeof(wrpfinfo->fname) -1);
     863           // add to netdrive plist
     864           debuglocal(pRes, 9,"list_files: dircachectx %x, %s->%p\n",
     865                      dircachectx, wrpfinfo->fname, wrpfinfo);
     866           addFindInfoCachedL(state->plist, wrpfinfo);
     867           // Also add the entry to the cache, this pointer will be released
     868           // when cache will be deleted
     869           dircache_write_entry(pRes->pdc, dircachectx, wrpfinfo->fname, wrpfinfo);
    861870        }
    862871
Note: See TracChangeset for help on using the changeset viewer.