OmniWeb 3.1 release candidate 1 is now available
Ken Case
kc at omnigroup.com
Thu Feb 3 16:28:19 PST 2000
OmniWeb 3.1 release candidate 1 is now available from our web site
at http://www.omnigroup.com/products/omniweb/download/.
Ken
Release notes for 3.1 release candidate 1 (also available at
http://www.omnigroup.com/products/omniweb/releasenotes/):
* Added exception handling around several pieces of code which
locked the main thread locked so we could no longer potentially lose
that lock due to an exception. (This caused hangs in OmniWeb 3.0.2 on
OPENSTEP: looking up the width of Unicode characters used in some
HTML lists raises an exception.)
* The "zoom" (or maximize) window control now tries to resize the
window to the smallest size that will eliminate scrollers. (This does
not work at all for framesets yet, because we still need to write
the logic to determine how big each subframe might actually want to
be.)
* Fixed right-clicking and control-clicking on image links and image
maps so that the destination of the link is now displayed and (on
Mac OS X and Mac OS X Server) the link context menu appears. (To
right click in Mac OS X Server, you must first install the
OmniMousePatch driver.)
* Improved our handling of embedded objects. We now know about the
"type" attribute, and can register plugins based on it. We also
changed the display processor so that it passes any additional
attributes along to the applet cell, which lets plugins register new
attributes on the EMBED tag, and have access to the values of those
attributes without having to modify the display processor itself.
* On Mac OS X Server 1.0-2, -[NSDate dateByAddingYears:...] will
hang forever if the resulting date is within the hour skipped by
daylight savings time (it has trouble making the leap). We now work
around this by calling -dateByAddingTimeInterval: instead, which
doesn't have this problem. (This caused hangs for a lot of people the
first time they opened their bookmarks following the Daylight
Savings Time change.)
* The contents of a <textarea> tag are no longer rewritten before
being displayed.
* When we look up a host name and turn it into an IP address, we no
longer remember that cached host entry forever: it will now
automatically expire after one hour (or you can flush it by hand by
flushing the cache). This means that you no longer have to restart
OmniWeb to see changes in host addresses (e.g., if www.omnigroup.com
starts being served by 198.151.161.2 rather than 198.151.161.1).
* Be more careful about what portions of an HTML page get
antialiased, so we don't waste a bunch of CPU time trying to
antialias images.
* Integrated OmniGroup CrashCatcher, which lists all of OmniWeb's
threads and their backtraces when OmniWeb crashes.
* Fixed a crash triggered by closing bookmarks while they were still
dirty.
* Fixed some potential crashes related to rendering HTML in multiple
threads simultaneously.
* We've discovered that a lot of OmniWeb's crashes are caused by one
thread loading a plug-in (bundle) while another thread is trying to
look up a method implementation: apparently the Objective C runtime
is not thread-safe with respect to loading bundles. As an experiment,
we're now preloading all the bundles (when we go multithreaded) to
see if that makes the application more stable. Unfortunately, this
slows down our launch time (but if the app crashes less, launch time
is less important).
We've thought of three alternatives to preloading:
- Wait until all other threads are idle before loading a bundle.
(Huge disadvantage: if we're downloading a 100MB file, that might
pause all the threads for a long time.)
- Suspend all other threads, and walk their stacks to see if any are
in the Objective C runtime. Once all threads are out of the runtime
go ahead and load the bundle, then resume the threads.
- Try to patch the runtime so it is thread-safe.
For now, though, we'll just see how many crashes go away with this
change.
* Added an exception handler around individual plug-in loads, so
that failure to load one plug-in won't stop the rest from loading.
* Applied patches from various people which fixed minor bugs in our
frameworks. Most of the patches didn't impact OmniWeb at all, since
the code wasn't exercised, with one significant exception: Karl Kraft
submitted a patch which fixed ONInternetSocket's -isReadable and
-isWritable methods, which always returned NO in the past. This
exposed a bug in some of our OWHTTPSession code which tried to reuse
a socket--code which was previously never exercised since those
methods always indicated the socket was no longer usable.
We've fixed this in our code, but unfortunately the HTTPS plug-in
overrides our method with their own implementation and encounters the
same bug. In fact, it seems to encounter some other bugs perhaps
because SSL connections really don't expect to be recycled in the
same way as we're recycling our normal connections.
I've updated the version number in OmniNetworking so that the HTTPS
plug-in for 3.0 will be skipped by 3.1, and since the HTTPS plug-in
source is available I've also written some patches which make it work
with OmniWeb 3.1. I'll be making these patches available to OIC so
that they can update their plug-in for 3.1 with minimal effort.
* Ported OmniWeb to be able to build on Mac OS X DP2. Unfortunately,
it doesn't run due to an incompatibility in Foundation's NSLock
class, but that incompatibility has reportedly been fixed for DP3.
* Pipelines now release autoreleased objects immediately in
+cancelTarget:.
More information about the OmniWeb-l
mailing list