From 123327cd0e1bf02aeac4e095e3c8fbd80a697fde Mon Sep 17 00:00:00 2001 From: "sdagley%netscape.com" Date: Thu, 22 Jul 1999 21:26:33 +0000 Subject: [PATCH] Change to address bug #10334 and improve startup time on Mac. Use sync i/o for reads of less than 2K. git-svn-id: svn://10.0.0.236/trunk@40703 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/nsprpub/pr/src/md/mac/macio.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/mozilla/nsprpub/pr/src/md/mac/macio.c b/mozilla/nsprpub/pr/src/md/mac/macio.c index c5ae92c9a86..7a352cb3d2e 100644 --- a/mozilla/nsprpub/pr/src/md/mac/macio.c +++ b/mozilla/nsprpub/pr/src/md/mac/macio.c @@ -245,13 +245,36 @@ PRInt32 ReadWriteProc(PRFileDesc *fd, void *buf, PRUint32 bytes, IOOperation op) ** with this thread. ** Don't compute error code from async call. Bug in OS returns a garbage value. */ - me->io_pending = PR_TRUE; me->io_fd = refNum; me->md.osErrCode = noErr; if (op == READ_ASYNC) - (void) PBReadAsync(&pbAsync); + { + /* + ** Skanky optimization so that reads < 2K are actually done synchronously + ** to optimize performance on small reads (e.g. registry reads on startup) + */ + if (bytes > 2048L) + { + me->io_pending = PR_TRUE; /* Only mark thread io pending in async call */ + (void) PBReadAsync(&pbAsync); + } + else + { + (void) PBReadSync(&pbAsync); + /* + ** This is probbaly redundant but want to make sure we indicate the read + ** is complete so we don't wander off into the Sargasso Sea of Mac + ** threading + */ + pbAsync.pb.ioParam.ioResult = 0; + } + } else + { + /* writes are currently always async so mark thread io pending */ + me->io_pending = PR_TRUE; (void) PBWriteAsync(&pbAsync); + } /* See if the i/o call is still pending before we actually yield */ if (pbAsync.pb.ioParam.ioResult == 1)