Changeset 2879 for trunk/src/kmk


Ignore:
Timestamp:
Sep 5, 2016, 10:14:21 PM (9 years ago)
Author:
bird
Message:

fixes

Location:
trunk/src/kmk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/dir-nt-bird.c

    r2868 r2879  
    7171*   Global Variables                                                                                                             *
    7272*********************************************************************************************************************************/
    73 PKFSCACHE g_pFsCache = NULL;
     73/** The cache.*/
     74PKFSCACHE   g_pFsCache = NULL;
     75/** Number of times dir_cache_invalid_missing was called. */
     76static KU32 g_cInvalidates = 0;
    7477
    7578
     
    445448        else
    446449        {
    447             if (pPathObj->cchName + 1 < cbFull)
     450            if ((size_t)pPathObj->cchName + 1 < cbFull)
    448451            {
    449452                memcpy(pszFull, pPathObj->pszName, pPathObj->cchName);
     
    474477int stat_only_mtime(const char *pszPath, struct stat *pStat)
    475478{
    476     KFSLOOKUPERROR  enmError;
    477     PKFSOBJ         pPathObj = kFsCacheLookupA(g_pFsCache, pszPath, &enmError);
    478     if (pPathObj)
    479     {
    480         if (pPathObj->bObjType != KFSOBJ_TYPE_MISSING)
    481         {
    482             kHlpAssert(pPathObj->fHaveStats); /* currently always true. */
    483             pStat->st_mtime = pPathObj->Stats.st_mtime;
     479    /* Currently a little expensive, so just hit the file system once the
     480       jobs starts comming in. */
     481    if (g_cInvalidates == 0)
     482    {
     483        KFSLOOKUPERROR  enmError;
     484        PKFSOBJ         pPathObj = kFsCacheLookupA(g_pFsCache, pszPath, &enmError);
     485        if (pPathObj)
     486        {
     487            if (pPathObj->bObjType != KFSOBJ_TYPE_MISSING)
     488            {
     489                kHlpAssert(pPathObj->fHaveStats); /* currently always true. */
     490                pStat->st_mtime = pPathObj->Stats.st_mtime;
     491                kFsCacheObjRelease(g_pFsCache, pPathObj);
     492                return 0;
     493            }
     494
    484495            kFsCacheObjRelease(g_pFsCache, pPathObj);
    485             return 0;
    486         }
    487 
    488         kFsCacheObjRelease(g_pFsCache, pPathObj);
    489         errno = ENOENT;
    490     }
    491     else
    492         errno =    enmError == KFSLOOKUPERROR_NOT_DIR
    493                 || enmError == KFSLOOKUPERROR_PATH_COMP_NOT_DIR
    494               ? ENOTDIR : ENOENT;
    495     return -1;
     496            errno = ENOENT;
     497        }
     498        else
     499            errno =    enmError == KFSLOOKUPERROR_NOT_DIR
     500                    || enmError == KFSLOOKUPERROR_PATH_COMP_NOT_DIR
     501                  ? ENOTDIR : ENOENT;
     502        return -1;
     503    }
     504    return birdStatModTimeOnly(pszPath, &pStat->st_mtim, 1 /*fFollowLink*/);
    496505}
    497506
     
    504513void dir_cache_invalid_missing(void)
    505514{
     515    g_cInvalidates++;
    506516    kFsCacheInvalidateAll(g_pFsCache);
    507517}
  • trunk/src/kmk/kmkbuiltin/kSubmit.c

    r2877 r2879  
    791791 * @param   pWorker             The worker instance.
    792792 * @param   dwErr               The error code.
    793  */
    794 static int kSubmitWinReadFailed(PWORKERINSTANCE pWorker, DWORD dwErr)
     793 * @param   pszWhere            Where it failed.
     794 */
     795static int kSubmitWinReadFailed(PWORKERINSTANCE pWorker, DWORD dwErr, const char *pszWhere)
    795796{
    796797    DWORD dwExitCode;
    797798
    798799    if (pWorker->cbResultRead == 0)
    799         errx(1, "ReadFile failed: %u", dwErr);
     800        errx(1, "%s/ReadFile failed: %u", pszWhere, dwErr);
    800801    else
    801         errx(1, "ReadFile failed: %u (read %u bytes)", dwErr, pWorker->cbResultRead);
     802        errx(1, "%s/ReadFile failed: %u (read %u bytes)", pszWhere, dwErr, pWorker->cbResultRead);
    802803    assert(dwErr != 0);
    803804
     
    824825 * @param   pWorker             The worker instance.
    825826 */
    826 static int kSubmitReadMoreResultWin(PWORKERINSTANCE pWorker)
     827static int kSubmitReadMoreResultWin(PWORKERINSTANCE pWorker, const char *pszWhere)
    827828{
    828829    /*
     
    847848            if (dwErr == ERROR_IO_PENDING)
    848849                return -1;
    849             return kSubmitWinReadFailed(pWorker, dwErr);
     850            return kSubmitWinReadFailed(pWorker, dwErr, pszWhere);
    850851        }
    851852
     
    886887     */
    887888l_again:
    888     rc = kSubmitReadMoreResultWin(pWorker);
     889    rc = kSubmitReadMoreResultWin(pWorker, "kSubmitMarkActive");
    889890    if (rc == -1)
    890891    {
     
    952953        while (pWorker->cbResultRead < sizeof(pWorker->Result))
    953954        {
    954             int rc = kSubmitReadMoreResultWin(pWorker);
     955            int rc = kSubmitReadMoreResultWin(pWorker, "kSubmitSubProcGetResult/more");
    955956            if (rc == -1)
    956957                return -1;
     
    962963    {
    963964        DWORD dwErr = GetLastError();
    964         kSubmitWinReadFailed(pWorker, dwErr);
     965        kSubmitWinReadFailed(pWorker, dwErr, "kSubmitSubProcGetResult/result");
    965966    }
    966967
Note: See TracChangeset for help on using the changeset viewer.