Q: My application is filling up the console with this message:
Jan 29 14:11:13 foo MyApp[22]: Exception handlers were not properly removed.
What can I do about this?
A: The message is often a report of a harmless unexpected situation, but can indicate an error requiring your attention. This message is printed when something disrupts the expected stack-like use of exception handling domains. If you install Handler B while in the domain of Handler A, you should remove Handler B before removing Handler A. If you remove HandlerA without having removed HandlerB, it reports this condition to the console. For example, using return instead of NX_VALRETURN() from the NX_DURING context of Handler B would not properly remove Handler B, and would cause an error when you try to remove Handler A. This is an example of an error you should take care to avoid.
You'll want to verify that your exception handling domains are nested properly. If you're not directly using exception handling, your application can still generate the error message by mismatched calls to AppKit functionality. For example, lock/unlock Focus, begin/end timer, and begin/end modal session all set and remove exception handlers. If there is a combination of calls that doesn't nest correctly, you'll see this message. Here's an example of the "incorrect" situation:
lockFocus sets handler #1
NXBeginTimer() sets handler #2
unlockFocus removes hander #1
NXEndTimer() removes handler #2
By changing this to call NXEndTimer() before unlockFocus , the handlers are removed in the expected stack-based manner, and thus avert the error message. (The message is actually harmless in this case, but still annoying)
This message can also result from a known bug in the SoundView under 2.0 that is fixed in 3.0. It occurs when you click or double-click in the SoundView to make a selection. There's no workaround for this; however, it shouldn't have any effects other than cluttering your console window.
QA880
Valid for 2.0, 3.0