Changeset 2879
- Timestamp:
- Sep 5, 2016, 10:14:21 PM (9 years ago)
- Location:
- trunk/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/dir-nt-bird.c
r2868 r2879 71 71 * Global Variables * 72 72 *********************************************************************************************************************************/ 73 PKFSCACHE g_pFsCache = NULL; 73 /** The cache.*/ 74 PKFSCACHE g_pFsCache = NULL; 75 /** Number of times dir_cache_invalid_missing was called. */ 76 static KU32 g_cInvalidates = 0; 74 77 75 78 … … 445 448 else 446 449 { 447 if ( pPathObj->cchName + 1 < cbFull)450 if ((size_t)pPathObj->cchName + 1 < cbFull) 448 451 { 449 452 memcpy(pszFull, pPathObj->pszName, pPathObj->cchName); … … 474 477 int stat_only_mtime(const char *pszPath, struct stat *pStat) 475 478 { 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 484 495 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*/); 496 505 } 497 506 … … 504 513 void dir_cache_invalid_missing(void) 505 514 { 515 g_cInvalidates++; 506 516 kFsCacheInvalidateAll(g_pFsCache); 507 517 } -
trunk/src/kmk/kmkbuiltin/kSubmit.c
r2877 r2879 791 791 * @param pWorker The worker instance. 792 792 * @param dwErr The error code. 793 */ 794 static int kSubmitWinReadFailed(PWORKERINSTANCE pWorker, DWORD dwErr) 793 * @param pszWhere Where it failed. 794 */ 795 static int kSubmitWinReadFailed(PWORKERINSTANCE pWorker, DWORD dwErr, const char *pszWhere) 795 796 { 796 797 DWORD dwExitCode; 797 798 798 799 if (pWorker->cbResultRead == 0) 799 errx(1, " ReadFile failed: %u", dwErr);800 errx(1, "%s/ReadFile failed: %u", pszWhere, dwErr); 800 801 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); 802 803 assert(dwErr != 0); 803 804 … … 824 825 * @param pWorker The worker instance. 825 826 */ 826 static int kSubmitReadMoreResultWin(PWORKERINSTANCE pWorker )827 static int kSubmitReadMoreResultWin(PWORKERINSTANCE pWorker, const char *pszWhere) 827 828 { 828 829 /* … … 847 848 if (dwErr == ERROR_IO_PENDING) 848 849 return -1; 849 return kSubmitWinReadFailed(pWorker, dwErr );850 return kSubmitWinReadFailed(pWorker, dwErr, pszWhere); 850 851 } 851 852 … … 886 887 */ 887 888 l_again: 888 rc = kSubmitReadMoreResultWin(pWorker );889 rc = kSubmitReadMoreResultWin(pWorker, "kSubmitMarkActive"); 889 890 if (rc == -1) 890 891 { … … 952 953 while (pWorker->cbResultRead < sizeof(pWorker->Result)) 953 954 { 954 int rc = kSubmitReadMoreResultWin(pWorker );955 int rc = kSubmitReadMoreResultWin(pWorker, "kSubmitSubProcGetResult/more"); 955 956 if (rc == -1) 956 957 return -1; … … 962 963 { 963 964 DWORD dwErr = GetLastError(); 964 kSubmitWinReadFailed(pWorker, dwErr );965 kSubmitWinReadFailed(pWorker, dwErr, "kSubmitSubProcGetResult/result"); 965 966 } 966 967 -
trunk/src/lib/nt/kFsCache.c
r2872 r2879 414 414 pHashEntry->fAbsolute = fAbsolute; 415 415 pHashEntry->idxMissingGen = (KU8)idxMissingGen; 416 pHashEntry->pFsObj = pFsObj;417 416 pHashEntry->enmError = enmError; 418 417 pHashEntry->pszPath = (const char *)kHlpMemCopy(pHashEntry + 1, pszPath, cchPath + 1); 419 418 if (pFsObj) 420 pHashEntry->uCacheGen = pFsObj->bObjType != KFSOBJ_TYPE_MISSING 421 ? pCache->auGenerations[ pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN] 422 : pCache->auGenerationsMissing[pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN]; 423 else if (enmError != KFSLOOKUPERROR_UNSUPPORTED) 424 pHashEntry->uCacheGen = pCache->auGenerationsMissing[idxMissingGen]; 419 { 420 pHashEntry->pFsObj = kFsCacheObjRetainInternal(pFsObj); 421 pHashEntry->uCacheGen = pFsObj->bObjType != KFSOBJ_TYPE_MISSING 422 ? pCache->auGenerations[ pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN] 423 : pCache->auGenerationsMissing[pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN]; 424 pFsObj->abUnused[0] += 1; // for debugging 425 } 425 426 else 426 pHashEntry->uCacheGen = KFSOBJ_CACHE_GEN_IGNORE; 427 { 428 pHashEntry->pFsObj = NULL; 429 if (enmError != KFSLOOKUPERROR_UNSUPPORTED) 430 pHashEntry->uCacheGen = pCache->auGenerationsMissing[idxMissingGen]; 431 else 432 pHashEntry->uCacheGen = KFSOBJ_CACHE_GEN_IGNORE; 433 } 427 434 428 435 pHashEntry->pNext = pCache->apAnsiPaths[idxHashTab]; … … 464 471 pHashEntry->fAbsolute = fAbsolute; 465 472 pHashEntry->idxMissingGen = (KU8)idxMissingGen; 466 pHashEntry->pFsObj = pFsObj;467 473 pHashEntry->enmError = enmError; 468 474 pHashEntry->pwszPath = (const wchar_t *)kHlpMemCopy(pHashEntry + 1, pwszPath, (cwcPath + 1) * sizeof(wchar_t)); 469 475 if (pFsObj) 470 pHashEntry->uCacheGen = pFsObj->bObjType != KFSOBJ_TYPE_MISSING 471 ? pCache->auGenerations[ pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN] 472 : pCache->auGenerationsMissing[pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN]; 473 else if (enmError != KFSLOOKUPERROR_UNSUPPORTED) 474 pHashEntry->uCacheGen = pCache->auGenerationsMissing[idxMissingGen]; 476 { 477 pHashEntry->pFsObj = kFsCacheObjRetainInternal(pFsObj); 478 pHashEntry->uCacheGen = pFsObj->bObjType != KFSOBJ_TYPE_MISSING 479 ? pCache->auGenerations[ pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN] 480 : pCache->auGenerationsMissing[pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN]; 481 pFsObj->abUnused[0] += 1; // for debugging 482 } 475 483 else 476 pHashEntry->uCacheGen = KFSOBJ_CACHE_GEN_IGNORE; 484 { 485 pHashEntry->pFsObj = NULL; 486 if (enmError != KFSLOOKUPERROR_UNSUPPORTED) 487 pHashEntry->uCacheGen = pCache->auGenerationsMissing[idxMissingGen]; 488 else 489 pHashEntry->uCacheGen = KFSOBJ_CACHE_GEN_IGNORE; 490 } 477 491 478 492 pHashEntry->pNext = pCache->apUtf16Paths[idxHashTab]; … … 3364 3378 3365 3379 KFSCACHE_LOG(("Destroying %s/%s, type=%d\n", pObj->pParent ? pObj->pParent->Obj.pszName : "", pObj->pszName, pObj->bObjType)); 3380 if (pObj->abUnused[1] != 0) 3381 { 3382 fprintf(stderr, "Destroying %s/%s, type=%d, path hash entries: %d!\n", pObj->pParent ? pObj->pParent->Obj.pszName : "", 3383 pObj->pszName, pObj->bObjType, pObj->abUnused[0]); 3384 __debugbreak(); 3385 } 3366 3386 3367 3387 /*
Note:
See TracChangeset
for help on using the changeset viewer.