Commit Graph

30 Commits

Author SHA1 Message Date
Dan Mills
01d4a7e2f7 fix a strict warning when onComplete is null 2008-07-16 19:33:07 -07:00
Dan Mills
94709c6381 move formatAsyncFrame to utils, don't print 'regular' stack trace when we have an async exception (it's not useful) 2008-07-11 13:40:06 -07:00
Atul Varma
7303b375dc Refactored the exception-handling code a bit and made traces produced by async look more like they used to. 2008-07-01 12:03:05 -07:00
Atul Varma
71372f5452 Tracebacks for async coroutines now provide a 'best guess' for where the coroutine was at the time that an exception was thrown, by showing the frame at which the generator's last continuation callback was created.
Added a 'location' property to RequestException, analogous to the 'location' property of wrapped nsIExceptions, so that tracebacks can be made for the exceptions if needed.
2008-07-01 11:12:00 -07:00
Atul Varma
d7ff36daab Fixed a bug from r5a5113a0a405 that caused some syncing unit tests to fail. 2008-06-30 16:55:38 -07:00
Dan Mills
fdde68445a change AsyncException so it implements toString (which returns the original exception) 2008-06-30 13:58:42 -07:00
Anant Narayanan
2339871cf6 Prevent multiple lock requests from being executed (bug 441922, r=thunder) 2008-06-26 11:15:02 -07:00
Atul Varma
c747b0559e Automatic merge. 2008-06-25 04:44:25 -07:00
Atul Varma
37225f431c Changed AsyncException so that it dynamically subclasses the exception it's wrapping, and adds an 'asyncStack' property to allow access to the asynchronous call stack. This, along with my previous few commits, makes the processing of stack traces in our code much more streamlined, and also allows our debugging output to be more informative, as stack information is now logged from the point at which an exception was thrown, rather than the point at which it was caught.
Also renamed some things in async.js to be more descriptive and easier-to-understand, albeit a bit more verbose.
2008-06-25 04:43:07 -07:00
Justin Dolske
e25d17c184 Bustage fix: frame.filename can be null, and the async stack dump can then fail (which causes other problems) 2008-06-24 19:39:58 -07:00
Atul Varma
7327a55d0d Renamed AsyncException.trace and Generator.trace to AsyncException.traceback and Generator.traceback, respectively, to distinguish them from Logger.trace() and also explicitly indicate their noun-like nature (since they're properties). 2008-06-24 19:15:54 -07:00
Atul Varma
caa3295271 Renamed the global trace() function in async.js to traceAsyncFrame(), to avoid confusing it with Logger.trace(), AsyncException.trace, and Generator.trace, all of which are also used in that file. 2008-06-24 19:08:35 -07:00
Atul Varma
4e39258260 Made the tracking of async generators/coroutines more robust for debugging purposes.
Refactored code	in syncCores.js	to use Utils.makeTimerForCall().

Improved test_passwords to perform an additional sync after the initial one.
2008-06-20 13:58:56 -07:00
Atul Varma
aa73eb4763 Fixed a bug in the outstanding-callback-warning system and made Generator.throw() and Generator.cont() private methods because no client code was using them and it could introduce bugs in the system if they do; we can revisit making them public again later if we want. 2008-06-19 19:03:10 -07:00
Atul Varma
e9670abd3f Added a new property to async.js, Async.outstandingGenerators, which returns the number of generators that haven't yet been finalized. This can be used for diagnostic purposes to determine whether generators haven't yet been called back. 2008-06-18 16:11:15 -07:00
Dan Mills
9812ba557e Make some 'debug' log calls into 'trace' ones. Use the frame formatter, which will remove long paths to extension dirs from the output. Don't warn about outstanding callbacks if we caught an exception from the generator. 2008-06-13 15:47:41 +09:00
Atul Varma
4864f07ae2 async.js now keeps track of how many outstanding callbacks it has and uses this information to log warnings about coroutines that may have yielded without an outstanding callback, and coroutines that may have finished while a callback is still outstanding. These are merely 'warnings' rather than certainties because this code assumes that there is a 1:1 correspondence between accesses to self.cb and yields, and also that self.cb's are actually passed to asynchronous functions. It'd be really cool if we could actually keep track of whether a callback got garbage collected before it was called or something, though I don't know how much it'd help in the end. 2008-06-11 19:19:16 -07:00
Atul Varma
7d98a5dbeb Added a few log messages to hopefully make the debugging of generators easier. Also added an id component to generators, which is part of their name, to help distinguish between concurrent instances of the same generator function. The following debug output represents the new logging infomation:
--
Async.Generator	DEBUG	 runTestGenerator-0: self.cb generated at test_async_missing_yield.js:28
Async.Generator	DEBUG	 secondGen-1: self.cb generated at test_async_missing_yield.js:20
Async.Generator	DEBUG	 secondGen-1: done() called.
Async.Generator	DEBUG	 runTestGenerator-0: self.cb() called, resuming coroutine.
Async.Generator	DEBUG	 runTestGenerator-0: done() called.
Async.Generator	DEBUG	 secondGen-1: self.cb() called, resuming coroutine.
Async.Generator	DEBUG	 secondGen-1: done() called.
Async.Generator	ERROR	 Async method 'secondGen-1' is missing a 'yield' call (or called done() after being finalized)
--

As you can see, I've added log messages whenever the Generator's 'cb' property is accessed--this is almost guaranteed to be very close to a 'yield' statement, and therefore provides us with a decently accurate idea of where the generator 'stopped'.  We also log a message when the generator continues, and by doing so we get an idea of how the coroutines interleave.

Another idea I had was to actually match calls to self.cb with calls to 'yield' to automatically detect e.g. two yields in a row (which will ordinarily result in a generator 'hanging'), a generator exiting while a self.cb still hasn't been called, but I'm not sure what kinds of reprecussions it may have.
2008-06-11 18:58:30 -07:00
Atul Varma
9cc4da48c1 Refactoring: made a new function, Utils.makeTimerForCall(), which is used by test suites and async.js. 2008-06-09 19:30:11 -07:00
Atul Varma
6fc267b942 Fixed a bug that was causing failing unit tests using async.js to not properly report error conditions. 2008-06-09 18:40:30 -07:00
Atul Varma
394167a10a Added a unit test suite for modules/async.js. 2008-06-06 21:40:30 -07:00
Atul Varma
49ad148d83 In async.js, renamed 'object' to 'thisArg', which makes the code clearer and easier to understand. 2008-06-06 17:46:34 -07:00
Dan Mills
edff2a32aa make some async generator errors clearer 2008-05-30 17:38:27 -07:00
Dan Mills
83fd7d6261 Various improvements:
* async generators: much better stack traces
* dav: use global identity system rather than login/logout to manage
  usernames and passwords.
* dav: there is a checkLogin() instead of login() which can be used to
  verify auth at any time.
* dav: make it so that we can (only internally atm) hold multiple
  locks for different URLs.
* identity: add an identity manager singleton service to keep
  identities globally, referenced by a name, with aliasing support (so
  e.g., dav can ask for the 'dav' identity, while something else can
  alias 'dav' to another identity).
* service: keep track of logged in status here, rather than in the dav
  service.  Use the global id manager.
2008-04-10 21:38:15 -07:00
Dan Mills
eaca70f4d9 add status notification to sharing dialog; fix async generators in the case where an async method is missing a yield (better error, continue execution in parent); add guts of demo sharing code to engine & store (for bookmarks, with some spillage) 2008-03-28 03:25:51 -07:00
Dan Mills
62e963c8b9 status label now has service status instead of username; service [un]lock observer notifications are gone; don't error when async methods don't call done() - consider them methods with no return value; don't require passing null into login() to cause the identity to look up the password in the pw mgr; make some wrapper 'method generators' to make lock handling and observer notification simpler 2008-03-27 19:12:53 -07:00
Dan Mills
24ba577b6f improve async generator logging; don't call done() on StopIteration when we already have a timer set (it means the generator just 'bottomed out' after calling done()); make XHRs be synchronous (blocking) - temporarily; fix up sharing code (adding to the keyring) 2008-03-26 00:59:34 -07:00
Dan Mills
5b6dc30300 work with all exception objects, whether we can modify them or not 2008-03-24 19:08:43 -07:00
Dan Mills
16920cd2ae Various improvements:
* Logging improvements / default log levels tweaked.  Less chatty now.
  Ability to tweak log levels of individual loggers via prefs.
* Various crypto module fixes, specially for RSA.
* 'service' lock removed, reuses server lock now.  dav module supports
  temporarily blocking locks to simulate the 'service' lock (login()
  needs this, since dav is not configured at that time).
* PKI support: data encryption uses randomly-generated symmetric keys,
  which are then encrypted with RSA public keys and stored on the
  server.
2008-03-19 15:17:04 -07:00
thunder@h-132.office.mozilla.org
cdbd7976e2 add missing async.js module 2008-03-11 11:47:54 -07:00