/usr/share/psychtoolbox-3/PsychMatlabTests/StaleDirectoryCacheBug.m is in psychtoolbox-3-common 3.0.11.20140816.dfsg1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 | function StaleDirectoryCacheBug
%
% Mathworks Case ID: 230202, submitted 5/7/99
%
% Matlab's directory cache is not updated when you add files to /toolbox/.
%
% dear mathworks
%
% Matlab 5.2.1 for Mac. Mac OS 8.5.1. I know you're not developing it now,
% but it's my impression that you are still tracking bugs, in case you do
% pick it up again.
%
% Matlab ought to update or flush its directory cache when it saves a new M
% function into the Toolbox folder. At present, the user must Quit and
% restart Matlab in order to get Matlab to notice the new file. (It's my
% impression that doing a "Set Path" did NOT help, even though I would have
% expected it to.)
%
% sincerely yours
%
% denis pelli
% professor of psychology and neural science at nyu
% premier apple developer
%
% ...
%
% There was a long back and forth, as Mathworks initially misunderstood my bug report.
% This message of mine finally succeeded in clarifying the issue.
% ...
%
% dear rob
%
% thanks for responding to my phone query. however, i must begin by noting
% that there is a procedural problem in how Mathworks handles bug reports.
% The Mathworks responses usually omit the question. If you had actually
% seen my question (bug report) you would know that I already understand
% caching and don't need the (very clear) explanation you provide.
%
% here is what I wrote to Elana on 5/20/99
%
% >dear elana
% >
% >thanks for your note. There's a subtle point here; let me try to clarify.
% >Matlab's behavior at the time of dispatching functions is fast and fine.
% >It is perfectly true that the only reasonable thing to do at that moment
% >is look up the function in a cache. The bug is the fact that when Matlab
% >stores a new file in its Toolbox directory, it KNOWS that this
% >invalidates the cache and it should, at that time, update the cache. It
% >is a bug for Matlab to knowingly change the directory and leave the cache
% >in a wrong state. It would be VERY easy to fix this bug since all that's
% >required is to call the cache update routine after saving a new file into
% >the Toolbox directory.
% >
% >could you draw your developers' attention to this?
% >
% >thanks
% >
% >denis
%
% Your message below restates the excellent reasons for doing caching.
% However, like Elana's responses, it fails to address the issue I'm
% raising. Matlab, when it adds a new function to the cached folder, should
% update the cache (i.e. call path(path) ). Failing to do this means that
% Matlab is going to rely on a cache that it knows to be stale, which is
% plain silly given that it's easy to fix. Could you draw the developer's
% attention to this?
%
% thanks for getting back to me so quickly.
%
% best
%
% denis
%
% p.s. I'm not sure how much detail to provide in how to implement the fix.
% I think it's obvious, but in case it isn't, let me specify. When Matlab
% saves an M file, it should check to see if it's going to save it in the
% cached directory. The easiest way to do this would be to look for the
% (possibly new) function in the cache. If there's a hit then we're fine,
% go ahead and save it. If there's not a hit and the new function will be
% stored in that directory then the directory cache should be marked as
% stale. Either you could add custom code to insert the new file name into
% the cache, or you could rebuild the entire cache, by calling path(path).
% Rebuilding the cache would be quite acceptable since this will be
% triggered only when a new file is added (which is rare), not when an
% existing file is modified. Thus the needed code is trivial, the
% performance loss is negligible, and the increase in user-perceived
% reliability of operation enormously increased. It is hard to describe how
% incredibly distressing it is to find Matlab saying that a just-saved file
% does not exist. No amount of documenting of such counter-intuitive
% behavior will make users "expect" this.
%
% >This is in response to Case ID: 230202
% >
% >Hello Denis,
% >
% >I am writing in response to the voice mail I left you on May 24, 1999, in
% >which I briefly discussed the reasons you cannot see changes to the toolbox
% >subdirectories.
% >
% >Here is the more detailed information I promised to send you.
% >
% >First, a brief overview:
% >
% >When you enter a function name at the prompt, Matlab checks to see whether
% >the file defining the function has been updated. This can take a lot of
% >time, and seems unnecessary for functions which change very seldomly, such
% >as those found in the \toolbox subdirectories. Therefore, the status for
% >M-files in these subdirectories are 'cached'. Note that the files
% >themselves are not compiled and in memory, it's just that Matlab keeps
% >track of what and where these files are.
% >
% >Here's how this works internally:
% >
% >When Matlab compiles a function, it keeps a marker indicating the date when
% >the file last changed. The next time that function is executed, Matlab
% >needs to decide whether to run the version already compiled and in memory
% >(faster), or to recompile the file (slower). It therefore checks the marker
% >against the date associated with the file. This file date will have been
% >modified by the operating system if the file was changed. If they are
% >different, Matlab recompiles the file. This applies to functions called
% >from within other functions, as well as at the command line.
% >
% >This process applies to all functions. The difference between user
% >functions and toolbox functions is that Matlab keeps a cache of all of the
% >dates for M-files in the \toolbox directories. This cache is faster than
% >actually looking at the date on the physical file, and it is only updated
% >when the path is changed. Thus, even if the \toolbox\function.m file has
% >been changed, the *cache* still indicates that Matlab should use the
% >compiled function in memory. Hence, confusion arises when you modify these
% >files (which, in general, we recommend that you avoid doing).
% >
% >Now, we realize the for a few people, such as those developing toolboxes,
% >this poses a problem. However, for the overwhelming majority of our users
% >that frequently run the toolbox functions, and do not save their m-files
% >under the toolbox directory, performance is more important than the
% >accuracy of running the proper file.
% >
% >Suggestions:
% >
% >1) In the rare cases where you modify functions in these directories, or if
% >you think Matlab's path cache has become out of date for any reason, just
% >type
% >
% > path(path)
% >
% > at the Matlab prompt. This will rebuild the cache.
% >
% >2) If you are going to be modifying files a lot (i.e., are in the process
% >of developing them), avoid putting them in the \toolbox directories. It's
% >probably not that important to cache their information until they are
% >pretty much stable, at which time you can put them in one of the \toolbox
% >directories permanently.
% >
% >You can create your own subdirectory for this purpose. If you create a new
% >directory, make sure you add it to the Matlab path.
% >
% >If you have further questions regarding this issue, please be sure to
% >mention the above Case ID Number in your email response to me.
% >
% >Sincerely,
% >
% >Rob Monteiro
% >Technical Support Engineer
% >robertm@mathworks.com
%
% Hello Denis,
%
% I am writing in response to your e-mail of May 26, 1999, in which you asked
% about recaching files when saving from a toolbox/ directory.
%
% Thank you for clarifying your request. I think I understand what you mean.
% It seems kind of obvious - if you save a file in the toolbox/ directory
% from the Editor/Debugger, we could simply rebuild the cache at that point.
%
% This stems back from the days of Matlab 4.2c and earlier, before there was
% an Editor/Debugger. Since m-files are just text files, they could (and
% still can) be opened and modified in any text editor. When the file was
% saved, Matlab would have no way of knowing that changes were made to a
% function unless it re-loaded the function. Because the toolbox/ functions
% were cached (along with the last modified date), the changes would never
% get recognized.
%
% Now that we have an Editor/Debugger, we know (or can find out) for the most
% part when someone saves a file to a toolbox/ directory. The only problem
% is if someone chooses not to use the Editor, we will not be able to account
% for this.
%
% However, I do think this is a good idea, so I have re-opened this issue
% with our development staff to see if they can implement this for a future
% release.
%
% Thank you bringing this to our attention.
%
% Sincerely,
%
% Rob Monteiro
% Technical Support Engineer
% robertm@mathworks.com
%
% Hi Rob,
%
% Denis has cc'd me on his exchange with respect to the
% stale directory cache issue. I just wanted to add
% a few post-scripts.
%
% a) In version 5.2, typing path(path) is often not
% sufficient to cause Matlab (on the Mac) to recognize
% new files placed in a toolbox folder. Indeed, the
% only thing that I find works consistently is to
% delete the Matlab settings file and restart Matlab.
% This may have been fixed in 5.2.1, which brings
% me to my next point.
%
% b) The updater for 5.2.1 works on some machines
% and not on others. I am not sure of all the
% parameters, but the machine where I have never
% gotten it to work has multiple disks.
%
% c) I agree that having your bug tracking system
% include the original report and to provide the
% entire exchange would be very helpful. It is
% something I have suggested previously but to
% no avail.
%
% Best,
%
% David Brainard
%
%
|