Category Archives: IDL

IDL 8.2+ Segmentation Fault / Abort on OSX with Dual-Thunderbolt Displays

The Symptoms

IDL 8.2+ immediately crashes at run-time if LM_LICENSE_FILE or /Applications/exelis/license/license.dat is populated. If neither the environment variable or the license file are present, IDL enters demo mode successfully.

IDL 8.2 Crash Message

$ idl
IDL Version 8.2.3, Mac OS X (darwin x86_64 m64). (c) 2013, Exelis Visual Information Solutions, Inc.
Segmentation fault: 11

IDL 8.3 Crash Message

$ idl
IDL Version 8.3, Mac OS X (darwin x86_64 m64). (c) 2013, Exelis Visual Information Solutions, Inc.
idl(3438,0x7fff736a7310) malloc: *** error for object 0xf07: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6 

The Cause

At run-time, if licensing data is provided by the end-user, IDL attempts to gather information about the local system’s network interfaces (specifically the MAC address). In our case IDL crashes because we have two external Thunderbolt monitors connected to the computer. If we remove one of the external displays IDL is able to continue on and retrieve a license without incident.

The system experiencing the crash has eleven network interfaces defined, consisting of Bluetooth (1), FireWire (2), WiFi (1), Thunderbolt Ethernet (2), On-board Ethernet (2), Bridge Adapters (2), and an IPSec VPN (1). Whether these interfaces are active or not means nothing, as IDL will try to poll each one for a valid MAC address.

IDL 8.2 Backtrace

The data left behind in /Library/Logs/DiagnosticReports was mildly useful with IDL 8.2. The “l_getid_hw” tried to read the hardware address of a given (unknown) ethernet device, but failed miserably in the process:

VM Regions Near 0x2540be570:
    mapped file            0000000106483000-0000000107af6000 [ 22.4M] r--/r-x SM=ALI  /usr/share/icu/icudt51l.dat
--> 
    STACK GUARD            00007fff5bc00000-00007fff5f400000 [ 56.0M] ---/rwx SM=NUL  stack guard for thread 0

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libidl.8.2.dylib                    0x000000010079d6df l_getid_hw + 34 <<<< HERE
1   libidl.8.2.dylib                    0x000000010079d534 l_getid_type + 2064
2   libidl.8.2.dylib                    0x000000010079cc65 l_gethostid + 26
3   libidl.8.2.dylib                    0x00000001007866f6 checkout_from_server + 278
4   libidl.8.2.dylib                    0x000000010078400a lm_start_real + 1048
5   libidl.8.2.dylib                    0x000000010078343b l_checkout + 530
6   libidl.8.2.dylib                    0x0000000100783157 lc_checkout + 191
7   libidl.8.2.dylib                    0x00000001000ec7c2 IDL_lm_checkout2 + 184
8   libidl.8.2.dylib                    0x00000001000eddc4 d_line + 103
9   libidl.8.2.dylib                    0x00000001000eef7b init_system_routines + 699
10  libidl.8.2.dylib                    0x000000010000c306 IDL_Initialize + 3591
11  libidl.8.2.dylib                    0x000000010000c4b8 IDL_Main + 64
12  idl                                 0x0000000100000f11 main + 227
13  idl                                 0x0000000100000e0c start + 52

IDL 8.3 Backtrace

Unfortunately, IDL 8.3’s crash report is essentially useless. No relevant information was given to help trace the error.

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000

Application Specific Information:
abort() called
*** error for object 0xf07: pointer being freed was not allocated 

Conclusion

Until Exelis releases a patch to address this issue I recommend unplugging your second monitor if you need to get your work done.

Note: We did not delete the unused Thunderbolt interfaces from System Preferences -> Network to test whether this cleared things up or not. Maybe it does, maybe it doesn’t. Give it a try.

Update (09/25/2014)

Chris Torrence on the comp.lang.idl-pvwave Google group responded to my post (here):

Hi Joe,

I’ll echo what David said – excellent bug report! I believe that this bug (IDL-69092) has been fixed in IDL 8.4, due out in just a few weeks. If you’re curious, this was a bug in the FlexLM driver. Here is the bug information from Flexera:

“lmhostid instability in the presence of multiple ethernet adapters. Previously, in the presence of several ethernet adapters, lmhostid and the callers of the lc_hostid API may experience a segmentation fault on OS X. This is now resolved. (FNP-9885)”

Apparently, Matlab and other products ran into the same issue.

Joe, once you’ve upgraded to IDL 8.4, could you post here and let us know if it’s fixed? If it’s still an issue, definitely contact support@exelisvis.com.

Cheers,

Chris

ExelisVIS

(Thanks again Chris!)

Update (10/24/2014)

Great news!

Now that we finally got our hands on IDL 8.4 I wanted to confirm this update did fix the segmentation fault issue on the machines in question.