Changeset 1559 for trunk/dll/seeall.c


Ignore:
Timestamp:
Dec 1, 2010, 11:16:31 PM (15 years ago)
Author:
Steven Levine
Message:

Ensure FindAllThread thread quits fast when requested

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/seeall.c

    r1533 r1559  
    4949  08 Mar 09 GKY Removed variable aurguments from docopyf and unlinkf (not used)
    5050  28 Jun 09 GKY Added AddBackslashToPath() to remove repeatative code.
    51   17 JAN 10 GKY Changes to get working with Watcom 1.9 Beta (1/16/10). Mostly cast CHAR CONSTANT * as CHAR *.
     51  17 Jan 10 GKY Changes to get working with Watcom 1.9 Beta (1/16/10). Mostly cast CHAR CONSTANT * as CHAR *.
     52  01 Dec 10 SHL Ensure FindAllThread thread quits fast when requested
    5253
    5354***********************************************************************/
     
    649650              GetPString(IDS_MOVEDTEXT) : GetPString(IDS_COPIEDTEXT);
    650651            if (*path) {
    651               strcpy(newname, path);
    652               AddBackslashToPath(newname);
     652              strcpy(newname, path);
     653              AddBackslashToPath(newname);
    653654              //if (newname[strlen(newname) - 1] != '\\')
    654655              //  strcat(newname, "\\");
     
    20142015      priority_normal();
    20152016      pffbFile = pffbArray;
     2017
    20162018      for (x = 0; x < ulFindCnt; x++) {
     2019        if (ad->stopflag)
     2020          break;
    20172021        if (pffbFile->attrFile & FILE_DIRECTORY) {
    20182022          // Skip . and ..
     
    20812085        pffbFile = (PFILEFINDBUF3L)((PBYTE)pffbFile + pffbFile->oNextEntryOffset);
    20822086      } // for
     2087
    20832088      if (ad->stopflag)
    20842089        break;
     2090
    20852091      ulFindCnt = ulFindMax;
    20862092      rc = xDosFindNext(hdir,
     
    21102116  HMQ hmq2 = (HMQ) 0;
    21112117  ALLDATA *ad = WinQueryWindowPtr(hwnd, QWL_USER);
     2118  APIRET apiret;
    21122119
    21132120# ifdef FORTIFY
    21142121  Fortify_EnterScope();
    21152122#  endif
    2116   if (!DosRequestMutexSem(ad->hmtxScan, SEM_INDEFINITE_WAIT)) {
     2123
     2124  // DbgMsg(pszSrcFile, __LINE__, "FindAllThread requesting hmtxScan");
     2125  apiret = DosRequestMutexSem(ad->hmtxScan, SEM_INDEFINITE_WAIT);
     2126  if (apiret != NO_ERROR)
     2127    Dos_Error(MB_CANCEL, apiret, hwnd, pszSrcFile, __LINE__, "DosRequestMutexSem");
     2128  else {
    21172129    priority_normal();
    21182130    hab2 = WinInitialize(0);
     2131
    21192132    if (hab2) {
    21202133      hmq2 = WinCreateMsgQueue(hab2, 0);
     
    21292142                *startname = (CHAR) (x + 'A');
    21302143                DoADir(hwnd, startname);
     2144                if (ad->stopflag)
     2145                  break;
    21312146                PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
    21322147                DosSleep(0); //26 Aug 07 GKY 1
    21332148              }
    2134             }
     2149            } // for
    21352150          }
    21362151        }
    21372152        else
    21382153          DoADir(hwnd, ad->szFindPath);
     2154
    21392155        DosPostEventSem(CompactSem);
    21402156      }
    21412157    }
    2142     if (ad->afalloc != ad->afheadcnt) {
    2143 
    2144       ALLFILES *tempa, **templ;
    2145 
    2146       tempa =
    2147         xrealloc(ad->afhead, sizeof(ALLFILES) * ad->afheadcnt, pszSrcFile,
    2148                  __LINE__);
    2149       if (tempa) {
    2150         ad->afhead = tempa;
    2151         ad->afalloc = ad->afheadcnt;
    2152       }
    2153       templ =
    2154         xrealloc(ad->afindex, sizeof(ALLFILES *) * ad->afheadcnt, pszSrcFile,
    2155                  __LINE__);
    2156       if (templ)
    2157         ad->afindex = templ;
    2158       DosPostEventSem(CompactSem);
    2159     }
    21602158
    21612159    if (!ad->stopflag) {
     2160      if (ad->afalloc != ad->afheadcnt) {
     2161
     2162        ALLFILES *tempa, **templ;
     2163
     2164        tempa =
     2165          xrealloc(ad->afhead, sizeof(ALLFILES) * ad->afheadcnt, pszSrcFile,
     2166                   __LINE__);
     2167        if (tempa) {
     2168          ad->afhead = tempa;
     2169          ad->afalloc = ad->afheadcnt;
     2170        }
     2171        templ =
     2172          xrealloc(ad->afindex, sizeof(ALLFILES *) * ad->afheadcnt, pszSrcFile,
     2173                   __LINE__);
     2174        if (templ)
     2175          ad->afindex = templ;
     2176        DosPostEventSem(CompactSem);
     2177      }
    21622178      PostMsg(hwnd, UM_RESCAN, MPFROMLONG(1), MPVOID);
    21632179      ReSort(hwnd);
    21642180    }
     2181
     2182    // DbgMsg(pszSrcFile, __LINE__, "FindAllThread releasing hmtxScan");
    21652183    DosReleaseMutexSem(ad->hmtxScan);
    21662184  }
     2185
    21672186  if (hmq2) {
    21682187    PostMsg(hwnd, UM_CONTAINER_FILLED, MPVOID, MPVOID);
    21692188    WinDestroyMsgQueue(hmq2);
    21702189  }
     2190
    21712191  if (hab2) {
    21722192    DecrThreadUsage();
    21732193    WinTerminate(hab2);
    21742194  }
     2195
    21752196# ifdef FORTIFY
    21762197  Fortify_LeaveScope();
     
    23672388  }
    23682389  CommaFmtULL(szCmmaFmtFileSize,
    2369               sizeof(szCmmaFmtFileSize), ad->afindex[y]->cbFile, ' ');
     2390              sizeof(szCmmaFmtFileSize), ad->afindex[y]->cbFile, ' ');
    23702391  FDateFormat(szDate, ad->afindex[y]->date);
    23712392  len = sprintf(szBuff,
     
    23822403                "-S"[((ad->afindex[y]->attrFile & FILE_SYSTEM) != 0)],
    23832404                "-D"[((ad->afindex[y]->attrFile & FILE_DIRECTORY) != 0)],
    2384                 szDate,
     2405                szDate,
    23852406                ad->afindex[y]->time.hours, TimeSeparator,
    23862407                ad->afindex[y]->time.minutes, TimeSeparator,
     
    25252546{
    25262547  ALLDATA *pAD = WinQueryWindowPtr(hwnd, QWL_USER);
     2548  APIRET apiret;
    25272549
    25282550  switch (msg) {
    25292551  case WM_CREATE:
    2530     // fprintf(stderr,"Seeall: WM_CREATE\n");
     2552    // DbgMsg(pszSrcFile, __LINE__, "SeeAllWndProc WM_CREATE");
    25312553    WinSetWindowPtr(hwnd, QWL_USER, NULL);
    25322554#   ifdef FORTIFY
     
    26642686
    26652687  case UM_SETUP5:
    2666     // fprintf(stderr,"Seeall: UM_SETUP5\n");
     2688    // DbgMsg(pszSrcFile, __LINE__, "SeeAllWndProc UM_SETUP5");
    26672689    if (pAD) {
    26682690      if (mp1 && *((CHAR *)mp1))
     
    27142736
    27152737  case UM_SETUP2:
    2716 // fprintf(stderr,"Seeall: UM_SETUP2\n");
     2738    // DbgMsg(pszSrcFile, __LINE__, "SeeAllWndProc UM_SETUP2");
    27172739    if (pAD) {
    27182740
     
    27452767
    27462768  case UM_SETUP3:
    2747 // fprintf(stderr,"Seeall: UM_SETUP3\n");
     2769    // DbgMsg(pszSrcFile, __LINE__, "SeeAllWndProc UM_SETUP3");
    27482770    if (pAD) {
    27492771      pAD->multiplier = pAD->afindexcnt / 32767;
     
    27842806
    27852807  case UM_SETUP4:
    2786     // fprintf(stderr,"Seeall: UM_SETUP4\n");
     2808    // DbgMsg(pszSrcFile, __LINE__, "SeeAllWndProc UM_SETUP4");
    27872809    if (pAD)
    27882810      pAD->killme = TRUE;
     
    27922814
    27932815  case UM_RESCAN:
    2794     // fprintf(stderr,"Seeall: UM_RESCAN\n");
     2816    // DbgMsg(pszSrcFile, __LINE__, "SeeAllWndProc UM_RESCAN");
    27952817    if (pAD && !pAD->stopflag) {
    27962818      if (DosRequestMutexSem(pAD->hmtxScan, SEM_IMMEDIATE_RETURN)) {
     2819        // Assume still working - show progress
    27972820        CHAR s[CCHMAXPATH + 80], tm[34];
    27982821
     
    28182841      }
    28192842      else {
     2843        // Assume scan done
    28202844        CHAR s[(CCHMAXPATH * 2) + 80], tm[34], ts[34], tb[34];
    28212845        ULONG y;
     
    28682892
    28692893  case UM_SETUP:
    2870     // fprintf(stderr,"Seeall: UM_SETUP\n");
     2894    // DbgMsg(pszSrcFile, __LINE__, "SeeAllWndProc UM_SETUP");
    28712895    if (pAD) {
    28722896      WinSendMsg(pAD->hvscroll, SBM_SETTHUMBSIZE, MPFROM2SHORT(1, 1), MPVOID);
     
    34353459      pAD->multiplier = 1;
    34363460      if (!pAD->afindexcnt) {
    3437         if (!fAlertBeepOff)
     3461        if (!fAlertBeepOff)
    34383462          DosBeep(250, 50);
    34393463        PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
    34403464      }
    34413465      else {
    3442         if (!fAlertBeepOff)
     3466        if (!fAlertBeepOff)
    34433467          DosBeep(1000, 25);
    34443468        WinInvalidateRect(hwnd, NULL, FALSE);
     
    34563480
    34573481  case WM_PAINT:
    3458     // fprintf(stderr,"Seeall: WM_PAINT\n");
     3482    // DbgMsg(pszSrcFile, __LINE__, "SeeAllWndProc WM_PAINT");
    34593483    if (pAD) {
    34603484
     
    35523576                                             [COLORS_CURSOREDNORMALBACK]]);
    35533577            CommaFmtULL(szCmmaFmtFileSize,
    3554                         sizeof(szCmmaFmtFileSize), pAD->afindex[y]->cbFile, ' ');
    3555             FDateFormat(szDate, pAD->afindex[y]->date);
     3578                        sizeof(szCmmaFmtFileSize), pAD->afindex[y]->cbFile, ' ');
     3579            FDateFormat(szDate, pAD->afindex[y]->date);
    35563580            len =
    35573581              sprintf(szBuff,
     
    35683592                      "-H"[((pAD->afindex[y]->attrFile & FILE_HIDDEN) != 0)],
    35693593                      "-S"[((pAD->afindex[y]->attrFile & FILE_SYSTEM) != 0)],
    3570                       "-D"[((pAD->afindex[y]->attrFile & FILE_DIRECTORY) != 0)],
    3571                       szDate,
     3594                      "-D"[((pAD->afindex[y]->attrFile & FILE_DIRECTORY) != 0)],
     3595                      szDate,
    35723596                      pAD->afindex[y]->time.hours, TimeSeparator,
    35733597                      pAD->afindex[y]->time.minutes, TimeSeparator,
     
    36543678
    36553679  case WM_VSCROLL:
    3656 // fprintf(stderr,"Seeall: WM_VSCROLL\n");
     3680    // DbgMsg(pszSrcFile, __LINE__, "SeeAllWndProc WM_VSCROLL");
    36573681    if (pAD && !pAD->stopflag &&
    36583682        !DosRequestMutexSem(pAD->hmtxScan, SEM_IMMEDIATE_RETURN)) {
     
    43384362
    43394363  case WM_SIZE:
    4340 // fprintf(stderr,"Seeall: WM_SIZE\n");
     4364    // DbgMsg(pszSrcFile, __LINE__, "SeeAllWndProc WM_SIZE");
    43414365    PostMsg(hwnd, UM_SETUP3, MPVOID, MPVOID);
    43424366    break;
    43434367
    43444368  case WM_CLOSE:
    4345 // fprintf(stderr,"Seeall: WM_CLOSE\n");
     4369    // DbgMsg(pszSrcFile, __LINE__, "SeeAllWndProc WM_CLOSE");
    43464370    if (pAD)
    43474371      pAD->stopflag = 1;
     
    43504374
    43514375  case WM_DESTROY:
    4352 // fprintf(stderr,"Seeall: WM_DESTROY\n");
     4376    // DbgMsg(pszSrcFile, __LINE__, "SeeAllWndProc WM_DESTROY");
    43534377    if (pAD) {
    43544378      pAD->stopflag = 1;
    43554379      if (pAD->hmtxScan) {
    4356         DosRequestMutexSem(pAD->hmtxScan, 15000);
    4357         DosCloseMutexSem(pAD->hmtxScan);
     4380        apiret = DosRequestMutexSem(pAD->hmtxScan, 2000);
     4381        if (apiret != NO_ERROR)
     4382          Dos_Error(MB_CANCEL, apiret, hwnd, pszSrcFile, __LINE__, "DosRequestMutexSem");
     4383        DosCloseMutexSem(pAD->hmtxScan);        // Are probably going to die anyway
    43584384      }
    43594385      if (pAD->hwndPopup)
Note: See TracChangeset for help on using the changeset viewer.