Ignore:
Timestamp:
Mar 7, 2011, 6:26:33 PM (14 years ago)
Author:
Silvan Scherrer
Message:

Samba Client 2.1: crash fix

File:
1 edited

Legend:

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

    r535 r567  
    133133static int ifL;
    134134
     135/* A mutex to serialize plugin calls because libsmb 3.3 is not thread safe. */
     136/* while libsbm 3.5 should be threadsafe again, remember to remove it then */
     137static NDMUTEX mutex;
     138       
     139static int lockInit (void)
     140{
     141    return ph->fsphCreateMutex (&mutex);
     142}
     143       
     144static void lockClose (void)
     145{
     146    ph->fsphCloseMutex (mutex);
     147}
     148       
     149static int lockRequest (void)
     150{
     151    return ph->fsphRequestMutex (mutex, SEM_INDEFINITE_WAIT);
     152}
     153
     154static void lockRelease (void)
     155{
     156    ph->fsphReleaseMutex (mutex);
     157}
     158
     159#define ENTER() do {            \
     160    int rcLock = lockRequest(); \
     161    if (rcLock != NO_ERROR)     \
     162        return rcLock;          \
     163} while (0)
     164
     165#define LEAVE()  do { \
     166    lockRelease();    \
     167} while (0)
     168
    135169int APIENTRY NdpPluginLoad (PLUGINHELPERTABLE2L *pPHT)
    136170{
     
    150184                ifL = 1;
    151185        }
     186        lockInit();
    152187        debugInit();
    153188        debuglocal(9,"Working with %s bit fileio NDFS\n", ifL ? "64" : "32");
     
    159194{
    160195        debugDelete();
     196        lockClose();
    161197        return NO_ERROR;
    162198}
     
    624660        Resource *pRes = NULL;
    625661
     662        ENTER();
     663
    626664        debuglocal(9,"NdpMountResource in\n");
    627665
     
    659697        }
    660698        debuglocal(9,"NdpMountResource rc=%d\n", rc);
     699        LEAVE();
    661700        return rc;
    662701}
     
    667706{
    668707        Resource *pRes = (Resource *)resource;
     708        ENTER();
    669709        dircache_delete(pRes->pdc);
    670710        memset(&pRes->srv, 0, sizeof(pRes->srv));
    671711        free(pRes);
    672712        debuglocal(9,"NdpFreeResource %d\n", NO_ERROR);
     713        LEAVE();
    673714        return NO_ERROR;
    674715}
     
    761802        FSALLOCATE fsa;
    762803
     804        ENTER();
    763805        debuglocal(9,"NdpRsrcQueryFSAllocate %08x\n", pfsa);
    764806
    765807        if (!pfsa)
    766808        {
     809                LEAVE();
    767810                return NO_ERROR;
    768811        }
     
    778821            pfsa->cbSector = 2048;
    779822            rc = (rc == 7 ? ERROR_BAD_DEV_TYPE : ERROR_ACCESS_DENIED);
     823            LEAVE();
    780824            return rc;
    781825        }
     
    801845
    802846        debuglocal(9,"NdpRsrcQueryFSAllocate %d/%d (cUnit = %d/cUnitAvail = %d/cbSector = %d)\n", rc, rc1, pfsa->cUnit, pfsa->cUnitAvail, pfsa->cbSector);
     847        LEAVE();
    803848        return rc;
    804849}
     
    812857        unsigned long action;
    813858        Connection *pConn = NULL;
     859
     860        ENTER();
    814861
    815862        debuglocal(9,"NdpCreateConnection in\n");
     
    823870        {
    824871                debuglocal(9,"NdpCreateConnection ERROR_NOT_ENOUGH_MEMORY %d\n", rc);
     872                LEAVE();
    825873                return rc;
    826874        }
     
    840888        *pconn = (HCONNECTION)pConn;
    841889        debuglocal(9,"NdpCreateConnection [%p] %d\n", pConn, rc);
     890        LEAVE();
    842891        return rc;
    843892}
     
    850899        Resource *pRes = pConn->pRes;
    851900        int rc;
     901
     902        ENTER();
    852903
    853904        debuglocal(9,"NdpFreeConnection in [%p]\n", pConn);
     
    862913        free(pConn);
    863914        debuglocal(9,"NdpFreeConnection %d\n", NO_ERROR);
     915        LEAVE();
    864916        return NO_ERROR;
    865917}
     
    892944        char path[CCHMAXPATH+1] = {0};
    893945
     946        ENTER();
     947
    894948                debuglocal(9,"NdpQueryPathInfo in [%p] <%s>\n", pConn, szPath);
    895949       
     
    897951                if (ph->fsphStrChr(szPath, '*') || ph->fsphStrChr(szPath, '?'))
    898952                {
     953                        LEAVE();
    899954                        return ERROR_FILE_NOT_FOUND;
    900955                }
     
    9961051                debuglocal(9,"NdpQueryPathInfo <%s> (%s) %d\n", szPath, path, rc);
    9971052
     1053        LEAVE();
    9981054        return rc;
    9991055}
     
    10141070        filelist_state state;
    10151071        char * p;
     1072
     1073        ENTER();
    10161074
    10171075        debug_printf("NdpFindStart in [%p]\n", pConn);
     
    10891147
    10901148        debuglocal(9,"NdpFindStart <%s> (%s) cnt %d %d\n", szPath, path, count, rc);
    1091 
     1149        LEAVE();
    10921150        return rc;
    10931151}
     
    11251183        char path[CCHMAXPATH+1] = {0};
    11261184        smbwrp_fileinfo finfo;
     1185
     1186        ENTER();
    11271187
    11281188        debug_printf("NdpSetPathInfo in [%p]\n", pConn);
     
    11461206        } while (0);
    11471207        debuglocal(9,"NdpSetPathInfo <%s> (%s) %d\n", szPathName, path, rc);
    1148 
     1208        LEAVE();
    11491209        return rc;
    11501210}
     
    12361296                return ERROR_EAS_NOT_SUPPORTED;
    12371297        }
     1298
     1299        ENTER();
     1300
    12381301        finfo = (smbwrp_fileinfo *)fdata.pData;
    12391302        path = finfo->fname;
     
    12431306        char *pchBuffer = (char *)malloc(cbBuffer);
    12441307        if (!pchBuffer)
     1308        {
     1309                LEAVE();
    12451310                return ERROR_NOT_ENOUGH_MEMORY;
     1311        }
    12461312
    12471313        do {
     
    12761342        free(pchBuffer);
    12771343        debuglocal(9,"NdpEAQuery <%s> %d %d %d\n", pfi->pszName, rc, pFEASrc->cbList, pFEAList->cbList);
    1278 
     1344        LEAVE();
    12791345        return rc;
    12801346}
     
    13071373                return ERROR_EAS_NOT_SUPPORTED;
    13081374        }
     1375
     1376        ENTER();
     1377
    13091378        finfo = (smbwrp_fileinfo *)fdata.pData;
    13101379        path = finfo->fname;
     
    13271396        } while (0);
    13281397        debuglocal(9,"NdpEASet %d\n", rc);
    1329 
     1398        LEAVE();
    13301399        return rc;
    13311400}
     
    13601429                return ERROR_EAS_NOT_SUPPORTED;
    13611430        }
     1431
     1432        ENTER();
    13621433
    13631434        debuglocal(9, "remove me NdpEASize before finfo =\n");
     
    13711442                *pulEASize = easize;
    13721443                debuglocal(9,"NdpEASize <%s> cached %d\n", path, easize);
     1444                LEAVE();
    13731445                return NO_ERROR;
    13741446        }
     
    13781450        char *pchBuffer = (char *)malloc(cbBuffer);
    13791451        if (!pchBuffer)
     1452        {
     1453                LEAVE();
    13801454                return ERROR_NOT_ENOUGH_MEMORY;
     1455        }
    13811456
    13821457        do {
     
    14071482        free(pchBuffer);
    14081483        debuglocal(9,"NdpEASize <%s> %d %d\n", pfi->pszName, *pulEASize, rc);
    1409 
     1484        LEAVE();
    14101485        return rc;
    14111486}
     
    14211496        debuglocal(9,"NdpSetCurrentDir in [%p]\n", pConn);
    14221497
     1498        ENTER();
     1499
    14231500        do {
    14241501                rc = pathparser(pRes, pConn, szPath, path);
     
    14311508        } while (0);
    14321509        debuglocal(9,"NdpSetCurrentDir <%s> (%s) %d\n", szPath, path, rc);
    1433 
     1510        LEAVE();
    14341511        return rc;
    14351512}
     
    14541531        unsigned long action;
    14551532        char path[CCHMAXPATH+1] = {0};
     1533
     1534        ENTER();
    14561535
    14571536        debuglocal(9,"NdpForceDelete in [%p]\n", pConn);
     
    14691548        } while (0);
    14701549        debuglocal(9,"NdpForceDelete <%s> (%s) %d\n", szFile, path, rc);
    1471 
     1550        LEAVE();
    14721551        return rc;
    14731552}
     
    14801559        unsigned long action;
    14811560        char path[CCHMAXPATH+1] = {0};
     1561
     1562        ENTER();
    14821563
    14831564        debuglocal(9,"NdpCreateDir in [%p]\n", pConn);
     
    14951576        } while (0);
    14961577        debuglocal(9,"NdpCreateDir <%s> (%s) %d\n", szDirName, path, rc);
    1497 
     1578        LEAVE();
    14981579        return rc;
    14991580}
     
    15061587        unsigned long action;
    15071588        char path[CCHMAXPATH+1] = {0};
     1589
     1590        ENTER();
    15081591
    15091592        debuglocal(9,"NdpDeleteDir in [%p]\n", pConn);
     
    15211604        } while (0);
    15221605        debuglocal(9,"NdpDeleteDir <%s> (%s) %d\n", szDir, path, rc);
    1523 
     1606        LEAVE();
    15241607        return rc;
    15251608}
     
    15341617        int l1, l2;
    15351618        char * p = szDst;
     1619
     1620        ENTER();
    15361621
    15371622        debuglocal(9,"NdpMove in [%p] from <%s> to <%s>\n", pConn, szSrc, szDst);
     
    15631648        } while (0);
    15641649        debuglocal(9,"NdpMove <%s> -> <%s> (%s) %d\n", szSrc, szDst, src, rc);
    1565 
     1650        LEAVE();
    15661651        return rc;
    15671652}
     
    15901675        int rc = 0;
    15911676        char path[CCHMAXPATH+1] = {0};
     1677
     1678        ENTER();
    15921679
    15931680        debuglocal(9,"smbopen in [%p] %d\n", pConn, pConn->file.fd);
     
    16311718                debuglocal(9,"smbopen NdpFileEASet %d. pFEAList->cbList %d\n", rc1, pFEAList->cbList);
    16321719        }
    1633 
     1720        LEAVE();
    16341721        return rc;
    16351722}
     
    16711758        smbwrp_fileinfo finfo;
    16721759        char path[CCHMAXPATH+1] = {0};
     1760
     1761        ENTER();
    16731762
    16741763        debuglocal(9,"NdpSetFileAttribute in [%p]\n", pConn);
     
    16861775        } while (0);
    16871776        debuglocal(9,"NdpSetFileAttribute <%s> (%s) %04x %d\n", szFileName, path, usAttr, rc);
    1688 
     1777        LEAVE();
    16891778        return rc;
    16901779}
     
    17301819        smbwrp_fileinfo finfo;
    17311820
     1821        ENTER();
     1822
    17321823        debug_printf("NdpFileQueryInfo in [%p]\n", pConn);
    17331824        do {
     
    17461837        } while (0);
    17471838        debuglocal(9,"NdpFileQueryInfo <%s> %d\n", pConn->file.fd < 0 ? "!null!" : pConn->file.fname, rc);
    1748 
     1839        LEAVE();
    17491840        return rc;
    17501841}
     
    17731864        if (!pchBuffer)
    17741865                return ERROR_NOT_ENOUGH_MEMORY;
     1866
     1867        ENTER();
    17751868
    17761869        do {
     
    18101903        free(pchBuffer);
    18111904        debuglocal(9,"NdpFileEAQuery out <%s>/%d pFEASrc->cbList=%d pFEAList->cbList=%d rc=%d\n", pConn->file.fname, pConn->file.fd, pFEASrc->cbList, pFEAList->cbList, rc);
    1812 
     1905        LEAVE();
    18131906        return rc;
    18141907}
     
    18311924                return ERROR_EAS_NOT_SUPPORTED;
    18321925        }
     1926
     1927        ENTER();
    18331928
    18341929        do {
     
    18561951        } while (0);
    18571952        debuglocal(9,"NdpFileEASet %d\n", rc);
    1858 
     1953        LEAVE();
    18591954        return rc;
    18601955}
     
    18841979        if (!pchBuffer)
    18851980                return ERROR_NOT_ENOUGH_MEMORY;
     1981
     1982        ENTER();
    18861983
    18871984        do {
     
    19172014        free(pchBuffer);
    19182015        debuglocal(9,"NdpFileEASize %d %d\n", *pulEASize, rc);
    1919 
     2016        LEAVE();
    19202017        return rc;
    19212018}
     
    19272024        int rc = 0;
    19282025        unsigned long action, attrFile;
     2026
     2027        ENTER();
    19292028
    19302029        debug_printf("NdpFileSetInfo in [%p]\n", pConn);
     
    19462045        } while (0);
    19472046        debuglocal(9,"NdpFileSetInfo <%s> %08x %d\n", pConn->file.fd < 0 ? "!null!" : pConn->file.fname, attrFile, rc);
    1948 
     2047        LEAVE();
    19492048        return NO_ERROR;
    19502049}
     
    19562055        int rc = 0;
    19572056        unsigned long action;
     2057
     2058        ENTER();
    19582059
    19592060        debuglocal(9,"NdpFileSetFilePtrL in [%p]\n", pConn);
     
    19722073        } while (0);
    19732074        debuglocal(9,"NdpFileSetFilePtrL <%s> %lld %lu %lld %d\n", pConn->file.fd < 0 ? "!null!" : pConn->file.fname, llOffset, ulMethod, *pllActual, rc);
    1974 
     2075        LEAVE();
    19752076        return rc;
    19762077}
     
    19922093        unsigned long action;
    19932094
     2095        ENTER();
     2096
    19942097        debuglocal(9,"NdpFileClose in [%p] %d <%s>\n", pConn, pConn->file.fd, pConn->file.fd < 0 ? "!null!" : pConn->file.fname);
    19952098
     
    20072110
    20082111        pConn->file.fd = -1;
     2112        LEAVE();
    20092113        return rc;
    20102114}
     
    20312135        unsigned long action;
    20322136
     2137        ENTER();
     2138
    20332139        debuglocal(9,"NdpFileNewSizeL in [%p]\n", pConn);
    20342140
     
    20442150        } while (0);
    20452151        debuglocal(9,"NdpFileNewSizeL <%s> %lld %d\n", pConn->file.fd < 0 ? "!null!" : pConn->file.fname, llLen, rc);
    2046 
     2152        LEAVE();
    20472153        return rc;
    20482154}
     
    20592165        unsigned long action;
    20602166        ULONG ulReadCompleted = 0;
     2167
     2168        ENTER();
    20612169
    20622170        debuglocal(9,"NdpFileRead in [%p]\n", pConn);
     
    21002208
    21012209        debuglocal(9,"NdpFileRead <%s> %lu %lu %d\n", pConn->file.fd < 0 ? "!null!" : pConn->file.fname, ulRead, *pulActual, rc);
    2102 
     2210        LEAVE();
    21032211        return rc;
    21042212}
     
    21122220        unsigned long onedone;
    21132221        unsigned long action;
     2222
     2223        ENTER();
    21142224
    21152225        debuglocal(9,"NdpFileWrite in [%p]\n", pConn);
     
    21312241        } while (0);
    21322242        debuglocal(9,"NdpFileWrite <%s> %lu %lu %d\n", pConn->file.fd < 0 ? "!null!" : pConn->file.fname, ulWrite, *pulActual, rc);
    2133 
    2134         return rc;
    2135 }
    2136 
     2243        LEAVE();
     2244        return rc;
     2245}
     2246
Note: See TracChangeset for help on using the changeset viewer.