appears to prevent a bug whereby multiple threads attempt to force one of the
promises at the same time, causing the promise to believe it is being used
recursively. All Framework tests passed (on OS X) after making this change, not
that I really expect the icons to be particularly crucial to the tests.
svn: r16820
(used `put-preference' not the plural form).
* Added `preferences:low-level-get-preference' that is set by default
to the `get-preference'. (Together with the previous one it is
possible to setup things so preferences are kept in a hash table
instead of on disk.)
* The `preferences:get' function will try to read a (marshalled) value
from the preferences if there is no value set, and the `marshalled'
hash table is gone (it was used only for initial values of
preferences).
This means that the preference file is not consulted until the
preference value is needed, which makes reading the file more lazy.
More importantly, if some user application sets the
`preferences:low-level-get-preference' hook, then the newly
installed hook will be used to read the initial values. This is
important since just registering a preference (via
`preferences:set-default') would already read the preference to the
`marshalled' hash table -- and many such preferences are registered
at various module top-levels, so this would happen before the user
code had any chance of changing the low-level get function.
The only visible effect of this change outside of this module is
that preferences are read more lazily from the file. For example,
if you start DrScheme and then remove the preference file and then
search, you will not see your saved search string because. (Before
this change, the saved search string would have been read on
startup, so its value was read before you removed the file.)
* Delayed reading of the old-preferences until needed for similar
reasons.
* Reformatted some of the documentation strings.
svn: r14716