[OpenAFS-devel] Leaks W2000 during directory scan.

James Peterson jimpeter@us.ibm.com
Fri, 9 Feb 2001 11:16:21 -0800


This patch is relative to openafs1.0.2

Problem:
During a directory scan W2K does not send the FindClose the way NT does.
When smb_ReceiveTran2SearchDir() processes FindFirst or FindNext, the
termination Flags is never set either (close search if end of search).
Since these operations don't occur smb_DeleteDirSearch() is never called;
therefore the dsp (smb_dirSearch_t) is never freed.

This problem was reproducible while trying to scan a directory (e.g. dir
*.c/s) with symbolic links.

When smb_ReceiveTran2SearchDir() processes FindFirst or FindNext the last
SMB call in a session can be indicated by checking for no more files
(filesnames==0).

Running a directory scan (DOS window) and file cache size of 5 MB:
   With the memory leak patch, the program grew upto the limit of +5.3MB.
   Without the patch, the program will grew +27MB before the operation was
   finished, then became unstable.

Patch:
\src\winnt\afsd\smb3.c

-2368,6  +2368,6
         * or if something went wrong, close the search.
         */
+        if ((searchFlags & 1) || (returnedNames == 0) //Release dsp when
names==0, W2k doesn't return FindClose like NT                 -         if
((searchFlags & 1) || ((searchFlags & 2) && eos)
          || code != 0) smb_DeleteDirSearch(dsp);
     if (code)
          smb_SendTran2Error(vcp, p, opx, code);

James Peterson
UFiler Team
"Integrity is the base of excellence."