Opened 13 years ago

Closed 13 years ago

Last modified 12 years ago

#475 closed defect (fixed)

uncaught exception in bind for IE means next bind silently fails.

Reported by: Morris Johns Owned by: James Burke
Priority: high Milestone:
Component: IO Version: 0.2
Keywords: bind exception Cc:
Blocked By: Blocking:

Description

If an exception occurs in the load (or handle) function for dojo.io.bind, then the next dojo.io.bind call silently fails. Problem found using IE6, for svn trunk. FF works properly. I didnt test the 2.2 release.

The requested URL is actually fetched (checked using Fiddler) but the load (or handle) function for the second dojo.io.bind is never called.

To repeat:

  • Put the attached html file into the dojo/tests/widget directory.
  • Open file in IE.
  • Click 1st button.
  • Get exception.
  • Click 2nd button.
  • Function secondBindReply() is never called.

I have given this a high priority because if it occurs in a production system, then the later failure is not clearly linked to an earlier exception (it is obvious in the test, but could be unobvious in production). I am not sure of the etiquette for priority/severity sorry.

Attachments (1)

dojo_bind_problem.html (1.2 KB) - added by anonymous 13 years ago.

Download all attachments as: .zip

Change History (8)

Changed 13 years ago by anonymous

Attachment: dojo_bind_problem.html added

comment:1 Changed 13 years ago by anonymous

Milestone: 0.4

comment:2 Changed 13 years ago by dylan

Component: CoreIO
Owner: changed from anonymous to alex

comment:3 Changed 13 years ago by j.compier@…

severity: majornormal

I encountered this problem before and found a cause and a solution.

The problem is the dojo.io.XMLHTTPTransport.watchInFlight() function. This function is called repeatedly by an interval timer. (See startWatchingInFlight)

The problem with interval timers (in IE) is that a soon as the called function throws an exception the interval timer will stop.

In this case the watchInFlight function will never called again. (Although the inFlightTimer variable remains nonzero) Every following request will fail. The watchInFlight must NEVER return with an exception!

The solution(workaround?) is to catch every exception in the watchInFlight function. This can be done by simply adding a try/catch block to the main function body, but it might be sufficient (and better) to just catch the exceptions inside the for loop. In this case if an exception will not break the loop and the all other items will be checked too.

Hope this helps.

Jacco

comment:4 Changed 13 years ago by guest

severity: normalmajor

comment:5 Changed 13 years ago by James Burke

Owner: changed from alex to James Burke

Stealing io and package bugs from Alex. Holler if you want it back.

comment:6 Changed 13 years ago by James Burke

Resolution: fixed
Status: newclosed

(In [5924]) Fixes #475. Added unit test to verify. Thanks for the test Morris.

comment:7 Changed 12 years ago by (none)

Milestone: 0.4

Milestone 0.4 deleted

Note: See TracTickets for help on using tickets.