Changeset 1317 for trunk/dll


Ignore:
Timestamp:
Dec 5, 2008, 2:45:02 AM (17 years ago)
Author:
Gregg Young
Message:

Add an event semaphore to prevent duplicate directory names in tree caused by RestoreDirCnrState running concurrently with the StubbyThread for the same drive. (Ticket 25)

Location:
trunk/dll
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/filldir.c

    r1316 r1317  
    120120  HWND        hwndDrivesList;
    121121  BOOL        RamDrive;
     122  BOOL        FirstDrive;
    122123}
    123124STUBBYSCAN;
     
    217218                     MPFROMP(StubbyScan->pci->pszFileName));
    218219        }
    219         StubbyScanCount--;
     220        StubbyScanCount--;
     221        if (StubbyScan->FirstDrive) {
     222          priority_critical();
     223          DbgMsg(pszSrcFile, __LINE__, "StubbyScanCount %i", StubbyScanCount);
     224          while (StubbyScanCount != 0)
     225            DosSleep(50);
     226          DosPostEventSem(DriveScanStart);
     227        }
    220228        WinDestroyMsgQueue(hmq);
    221229      }
     
    964972          if (stopflag && *stopflag)
    965973            goto Abort;
    966           if (fSyncUpdates) {
     974          if (fSyncUpdates) {
    967975            pciFirst = WinSendMsg(hwndCnr, CM_ALLOCRECORD,
    968976                                  MPFROMLONG(EXTRA_RECORD_BYTES),
     
    10171025              ullReturnBytes += ullTotalBytes;
    10181026              ulReturnFiles += ulSelCnt;
    1019             }
     1027            }
    10201028          } // if sync updates
    10211029          else {
     
    15521560    STUBBYSCAN *StubbyScan;
    15531561    HWND hwndDrivesList = WinWindowFromID(WinQueryWindow(hwndParent, QW_PARENT),
    1554                                           MAIN_DRIVELIST);
    1555 
    1556     //AddDrive = TRUE;
     1562                                          MAIN_DRIVELIST);
     1563    PULONG pulPostCt;
     1564    BOOL FirstDrive = TRUE;
     1565
    15571566    pci = (PCNRITEM) WinSendMsg(hwndCnr,
    15581567                                CM_QUERYRECORD,
    15591568                                MPVOID,
    1560                                 MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER));
     1569                                MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER));
     1570    StubbyScanCount ++;
    15611571    while (pci && (INT)pci != -1) {
    15621572      StubbyScan = xmallocz(sizeof(STUBBYSCAN), pszSrcFile, __LINE__);
     
    15671577      StubbyScan->hwndDrivesList = hwndDrivesList;
    15681578      StubbyScan->RamDrive = FALSE;
     1579      StubbyScan->FirstDrive = FALSE;
    15691580      pciNext = (PCNRITEM) WinSendMsg(hwndCnr,
    15701581                                      CM_QUERYRECORD,
     
    15801591          {
    15811592            if (DRIVE_RAMDISK)
    1582               StubbyScan->RamDrive = TRUE;
     1593              StubbyScan->RamDrive = TRUE;
     1594            if (FirstDrive)
     1595              StubbyScan->FirstDrive = TRUE;
    15831596            rc = _beginthread(StubbyScanThread, NULL, 65536, StubbyScan);
    15841597            if (rc == -1)
    15851598              Runtime_Error(pszSrcFile, __LINE__,
    1586                             GetPString(IDS_COULDNTSTARTTHREADTEXT));
     1599                            GetPString(IDS_COULDNTSTARTTHREADTEXT));
     1600            else
     1601              FirstDrive = FALSE;
    15871602          } // if drive for scanning
    15881603          else
     
    16051620      pci = pciNext;
    16061621    } // while
     1622    StubbyScanCount --;
    16071623  }
    16081624  if (hwndParent)
  • trunk/dll/fm3dll.h

    r1218 r1317  
    189189// #define priority_tweaked()  DosSetPriority(PRTYS_THREAD,PRTYC_REGULAR,1L,0L)                 // Unused, 13 Sep 08 JBS
    190190#define priority_bumped()   DosSetPriority(PRTYS_THREAD,PRTYC_REGULAR,3L,0L)
    191 // #define priority_critical() DosSetPriority(PRTYS_THREAD,PRTYC_FOREGROUNDSERVER,2L,0L)        // Unused, 13 Sep 08 JBS
     191#define priority_critical() DosSetPriority(PRTYS_THREAD,PRTYC_FOREGROUNDSERVER,2L,0L)   // Unused, 13 Sep 08 JBS
    192192// #define priority_max()      DosSetPriority(PRTYS_THREAD,PRTYC_FOREGROUNDSERVER,31L,0L)       // Unused, 13 Sep 08 JBS
    193193
  • trunk/dll/init.c

    r1313 r1317  
    158158
    159159#pragma data_seg(GLOBAL1)
     160HEV  DriveScanStart;
    160161HMTX hmtxFM2Delete;
    161162HMTX hmtxFM2Globals;
     
    11881189    Dos_Error(MB_CANCEL, rc, HWND_DESKTOP, pszSrcFile, __LINE__,
    11891190              "DosCreateMutexSem");
     1191  if (DosCreateEventSem("\\SEM32\\DRIVESCAN", &DriveScanStart, 0L, FALSE))
     1192    Dos_Error(MB_ENTER, rc, HWND_DESKTOP, pszSrcFile, __LINE__,
     1193              GetPString(IDS_CREATESEMFAILED));
    11901194  /*
    11911195   * set some defaults (note: everything else automatically initialized
  • trunk/dll/init.h

    r1313 r1317  
    9393extern HMTX hmtxFM2Globals;
    9494extern HMTX hmtxFM2Delete;
     95extern HEV  DriveScanStart;
    9596
    9697#endif // INIT_H
Note: See TracChangeset for help on using the changeset viewer.