Thread overview
Mac OS crash, details inside...
Jun 13, 2013
Gary Willoughby
Jun 14, 2013
Jacob Carlborg
Jun 14, 2013
Gary Willoughby
Jun 14, 2013
Gary Willoughby
Jun 17, 2013
Sean Kelly
Jun 17, 2013
Gary Willoughby
June 13, 2013
I get a program crash each time running the following code on MacOS 10.8 (Lion). It seems to run ok on Ubuntu 12.04:

import core.sys.posix.sys.stat;
import core.sys.posix.unistd;
import std.c.stdio;
import std.c.stdlib;
import std.process;
import std.stdio;
import std.string;
import std.file;

int main(string[] args)
{
    pid_t pid, sid;

    pid = fork();
    if (pid < 0)
    {
        exit(EXIT_FAILURE);
    }

    if (pid > 0)
    {
        exit(EXIT_SUCCESS);
    }

    umask(0);

    sid = setsid();
    if (sid < 0)
    {
        exit(EXIT_FAILURE);
    }

    if ((core.sys.posix.unistd.chdir("/")) < 0)
    {
        exit(EXIT_FAILURE);
    }

    close(STDIN_FILENO);
    close(STDOUT_FILENO);
    close(STDERR_FILENO);

    auto logFile = File("/home/gary/Desktop/test.log", "a");
    logFile.writeln("Reading file");

    string command = format("logger -t %s %s", "hello", "This is a test");
    executeShell(command);

    logFile.writeln("Done");

    return 0;
}

Crash log:

Process:         main [1091]
Path:            /private/tmp/*/main
Identifier:      main
Version:         0
Code Type:       X86-64 (Native)
Parent Process:  ??? [1]
User ID:         501

Date/Time:       2013-06-13 18:34:59.413 +0100
OS Version:      Mac OS X 10.8.4 (12E55)
Report Version:  10

Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x000000010f70cb08

VM Regions Near 0x10f70cb08:
--> __TEXT                 000000010f6ea000-000000010f7a9000 [  764K] r-x/rwx SM=COW  /tmp/*
    __DATA                 000000010f7a9000-000000010f813000 [  424K] rw-/rwx SM=COW  /tmp/*

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   main                              0x000000010f795e94 D3std5stdio4File6detachMFZv + 32
1   main                              0x000000010f795b91 D3std5stdio4File6__dtorMFZv + 13
2   main                              0x000000010f796999 D3std5stdio4File7ByChunk11__fieldDtorMFZv + 13
3   main                              0x000000010f6ec172 D3std7process133__T11executeImplS108_D3std7process9pipeShellFNfAyaE3std7process8RedirectxHAyaAyaE3std7process6ConfigZS3std7process12ProcessPipesTAyaZ11executeImplFAyaxHAyaAyaE3std7process6ConfigmZS3std7process133__T11executeImplS108_D3std7process9pipeShellFNfAyaE3std7process8RedirectxHAyaAyaE3std7process6ConfigZS3std7process12ProcessPipesTAyaZ11executeImplFAyaxHAyaAyaE3std7process6ConfigmZ13ProcessOutput + 466
4   main                              0x000000010f78fd39 D3std7process12executeShellFNeAyaxHAyaAyaE3std7process6ConfigmZS3std7process133__T11executeImplS108_D3std7process9pipeShellFNfAyaE3std7process8RedirectxHAyaAyaE3std7process6ConfigZS3std7process12ProcessPipesTAyaZ11executeImplFAyaxHAyaAyaE3std7process6ConfigmZ13ProcessOutput + 49
5   main                              0x000000010f6eb279 _Dmain + 317
6   main                              0x000000010f76b759 D2rt6dmain211_d_run_mainUiPPaPUAAaZiZi7runMainMFZv + 33
7   main                              0x000000010f76b2a5 D2rt6dmain211_d_run_mainUiPPaPUAAaZiZi7tryExecMFMDFZvZv + 45
8   main                              0x000000010f76b7a5 D2rt6dmain211_d_run_mainUiPPaPUAAaZiZi6runAllMFZv + 61
9   main                              0x000000010f76b2a5 D2rt6dmain211_d_run_mainUiPPaPUAAaZiZi7tryExecMFMDFZvZv + 45
10  main                              0x000000010f76b259 _d_run_main + 457
11  main                              0x000000010f76b088 main + 20
12  libdyld.dylib                     0x00007fff8d8147e1 start + 1

Thread 0 crashed with X86 Thread State (64-bit):
  rax: 0x000000010f70cb00  rbx: 0x000000010f6ec166  rcx: 0x000000010f70cb08  rdx: 0x00007fa32b403bd0
  rdi: 0x00007fff50515680  rsi: 0x0000000000000030  rbp: 0x00007fff50514d20  rsp: 0x00007fff50514d10
   r8: 0x000000010f8110f0   r9: 0x000000010f8123e0  r10: 0x00000000000003b0  r11: 0x0000000000000206
  r12: 0x00007fa32b4039a0  r13: 0x00007fa32b4039c0  r14: 0x0000000000000002  r15: 0x0000000000000001
  rip: 0x000000010f795e94  rfl: 0x0000000000010206  cr2: 0x000000010f70cb08
Logical CPU: 1

Binary Images:
       0x10f6ea000 -        0x10f7a8ff7 +main (0) <E2E209E1-8709-3E23-9D99-C6001D1DB254> /tmp/*/main
    0x7fff6f2ea000 -     0x7fff6f31e93f  dyld (210.2.3) <6900F2BA-DB48-3B78-B668-58FC0CF6BCB8> /usr/lib/dyld
    0x7fff8c796000 -     0x7fff8c7bbff7  libc++abi.dylib (26) <D86169F3-9F31-377A-9AF3-DB17142052E4> /usr/lib/libc++abi.dylib
    0x7fff8c9a2000 -     0x7fff8c9a8ff7  libunwind.dylib (35.1) <21703D36-2DAB-3D8B-8442-EAAB23C060D3> /usr/lib/system/libunwind.dylib
    0x7fff8cb46000 -     0x7fff8cb7cfff  libsystem_info.dylib (406.17) <4FFCA242-7F04-365F-87A6-D4EFB89503C1> /usr/lib/system/libsystem_info.dylib
    0x7fff8d812000 -     0x7fff8d815ff7  libdyld.dylib (210.2.3) <F59367C9-C110-382B-A695-9035A6DD387E> /usr/lib/system/libdyld.dylib
    0x7fff8db35000 -     0x7fff8db3bfff  libmacho.dylib (829) <BF332AD9-E89F-387E-92A4-6E1AB74BD4D9> /usr/lib/system/libmacho.dylib
    0x7fff8dc48000 -     0x7fff8dc4dfff  libcache.dylib (57) <65187C6E-3FBF-3EB8-A1AA-389445E2984D> /usr/lib/system/libcache.dylib
    0x7fff8e2cd000 -     0x7fff8e2cfff7  libunc.dylib (25) <92805328-CD36-34FF-9436-571AB0485072> /usr/lib/system/libunc.dylib
    0x7fff8ea69000 -     0x7fff8ea6afff  libsystem_blocks.dylib (59) <D92DCBC3-541C-37BD-AADE-ACC75A0C59C8> /usr/lib/system/libsystem_blocks.dylib
    0x7fff8ea6b000 -     0x7fff8ea6cff7  libdnsinfo.dylib (453.19) <14202FFB-C3CA-3FCC-94B0-14611BF8692D> /usr/lib/system/libdnsinfo.dylib
    0x7fff8f414000 -     0x7fff8f41cff7  libsystem_dnssd.dylib (379.38.1) <BDCB8566-0189-34C0-9634-35ABD3EFE25B> /usr/lib/system/libsystem_dnssd.dylib
    0x7fff906bb000 -     0x7fff906c3fff  liblaunch.dylib (442.26.2) <2F71CAF8-6524-329E-AC56-C506658B4C0C> /usr/lib/system/liblaunch.dylib
    0x7fff91088000 -     0x7fff91089fff  libDiagnosticMessagesClient.dylib (8) <8548E0DC-0D2F-30B6-B045-FE8A038E76D8> /usr/lib/libDiagnosticMessagesClient.dylib
    0x7fff927a3000 -     0x7fff927efff7  libauto.dylib (185.4) <AD5A4CE7-CB53-313C-9FAE-673303CC2D35> /usr/lib/libauto.dylib
    0x7fff92a95000 -     0x7fff92a9afff  libcompiler_rt.dylib (30) <08F8731D-5961-39F1-AD00-4590321D24A9> /usr/lib/system/libcompiler_rt.dylib
    0x7fff93016000 -     0x7fff93024ff7  libsystem_network.dylib (77.10) <0D99F24E-56FE-380F-B81B-4A4C630EE587> /usr/lib/system/libsystem_network.dylib
    0x7fff93588000 -     0x7fff9358afff  libquarantine.dylib (52.1) <143B726E-DF47-37A8-90AA-F059CFD1A2E4> /usr/lib/system/libquarantine.dylib
    0x7fff9362c000 -     0x7fff9364eff7  libxpc.dylib (140.43) <70BC645B-6952-3264-930C-C835010CCEF9> /usr/lib/system/libxpc.dylib
    0x7fff939a0000 -     0x7fff939a1ff7  libSystem.B.dylib (169.3) <FF25248A-574C-32DB-952F-B948C389B2A4> /usr/lib/libSystem.B.dylib
    0x7fff94e00000 -     0x7fff94f1892f  libobjc.A.dylib (532.2) <90D31928-F48D-3E37-874F-220A51FD9E37> /usr/lib/libobjc.A.dylib
    0x7fff9523b000 -     0x7fff9523bfff  libkeymgr.dylib (25) <CC9E3394-BE16-397F-926B-E579B60EE429> /usr/lib/system/libkeymgr.dylib
    0x7fff957b5000 -     0x7fff957c3fff  libcommonCrypto.dylib (60027) <BAAFE0C9-BB86-3CA7-88C0-E3CBA98DA06F> /usr/lib/system/libcommonCrypto.dylib
    0x7fff957d2000 -     0x7fff957edff7  libsystem_kernel.dylib (2050.24.15) <A9F97289-7985-31D6-AF89-151830684461> /usr/lib/system/libsystem_kernel.dylib
    0x7fff9595a000 -     0x7fff95a26ff7  libsystem_c.dylib (825.26) <4C9EB006-FE1F-3F8F-8074-DFD94CF2CE7B> /usr/lib/system/libsystem_c.dylib
    0x7fff960e1000 -     0x7fff960e2ff7  libremovefile.dylib (23.2) <6763BC8E-18B8-3AD9-8FFA-B43713A7264F> /usr/lib/system/libremovefile.dylib
    0x7fff969c7000 -     0x7fff969c8ff7  libsystem_sandbox.dylib (220.3) <B739DA63-B675-387A-AD84-412A651143C0> /usr/lib/system/libsystem_sandbox.dylib
    0x7fff969c9000 -     0x7fff969f7ff7  libsystem_m.dylib (3022.6) <B434BE5C-25AB-3EBD-BAA7-5304B34E3441> /usr/lib/system/libsystem_m.dylib
    0x7fff96f04000 -     0x7fff96f19ff7  libdispatch.dylib (228.23) <D26996BF-FC57-39EB-8829-F63585561E09> /usr/lib/system/libdispatch.dylib
    0x7fff96f47000 -     0x7fff96f96ff7  libcorecrypto.dylib (106.2) <CE0C29A3-C420-339B-ADAA-52F4683233CC> /usr/lib/system/libcorecrypto.dylib
    0x7fff9720a000 -     0x7fff97272ff7  libc++.1.dylib (65.1) <20E31B90-19B9-3C2A-A9EB-474E08F9FE05> /usr/lib/libc++.1.dylib
    0x7fff975e9000 -     0x7fff975f0fff  libcopyfile.dylib (89) <876573D0-E907-3566-A108-577EAD1B6182> /usr/lib/system/libcopyfile.dylib
    0x7fff975fd000 -     0x7fff97608fff  libsystem_notify.dylib (98.5) <C49275CC-835A-3207-AFBA-8C01374927B6> /usr/lib/system/libsystem_notify.dylib

External Modification Summary:
  Calls made by other processes targeting this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by all processes on this machine:
    task_for_pid: 196
    thread_create: 1
    thread_set_state: 0

VM Region Summary:
ReadOnly portion of Libraries: Total=58.9M resident=90.5M(154%) swapped_out_or_unallocated=16777216.0T(29874624397312%)
Writable regions: Total=18.4M written=44K(0%) resident=212K(1%) swapped_out=0K(0%) unallocated=18.2M(99%)

REGION TYPE                      VIRTUAL
===========                      =======
MALLOC                             9396K
MALLOC guard page                    16K
STACK GUARD                        56.0M
Stack                              8192K
VM_ALLOCATE                        1024K
__DATA                             1020K
__LINKEDIT                         53.6M
__TEXT                             5416K
shared memory                        12K
===========                      =======
TOTAL                             134.1M
June 14, 2013
On 2013-06-13 19:42, Gary Willoughby wrote:
> I get a program crash each time running the following code on MacOS 10.8
> (Lion). It seems to run ok on Ubuntu 12.04:
>
> import core.sys.posix.sys.stat;
> import core.sys.posix.unistd;
> import std.c.stdio;
> import std.c.stdlib;
> import std.process;
> import std.stdio;
> import std.string;
> import std.file;
>
> int main(string[] args)
> {
>      pid_t pid, sid;
>
>      pid = fork();
>      if (pid < 0)
>      {
>          exit(EXIT_FAILURE);
>      }
>
>      if (pid > 0)
>      {
>          exit(EXIT_SUCCESS);
>      }
>
>      umask(0);
>
>      sid = setsid();
>      if (sid < 0)
>      {
>          exit(EXIT_FAILURE);
>      }
>
>      if ((core.sys.posix.unistd.chdir("/")) < 0)
>      {
>          exit(EXIT_FAILURE);
>      }
>
>      close(STDIN_FILENO);
>      close(STDOUT_FILENO);
>      close(STDERR_FILENO);
>
>      auto logFile = File("/home/gary/Desktop/test.log", "a");
>      logFile.writeln("Reading file");
>
>      string command = format("logger -t %s %s", "hello", "This is a test");
>      executeShell(command);
>
>      logFile.writeln("Done");
>
>      return 0;
> }

You do know that you usually don't have a /home/ directory on Mac OS X? On Mac OS X it's called /Users/.

BTW, running that on Mac OS X 10.6.3 does not cause a crash. Although it doesn't seem to print or write anything.

-- 
/Jacob Carlborg
June 14, 2013
> You do know that you usually don't have a /home/ directory on Mac OS X? On Mac OS X it's called /Users/.

Yeah, that was me running the same code on Ubuntu.

> BTW, running that on Mac OS X 10.6.3 does not cause a crash. Although it doesn't seem to print or write anything.

That's the problem i can't pin down. It writes the above log file to /var/log/system.log. other than that there is no feedback at all, the program just ends without writing to the open file.

It seems to be related to the daemon code as it doesn't happen when that code is commented out.
June 14, 2013
In fact i have the same problem reading files too. It only reads files up to a certain amount of bytes then crashes in the same manner explained above. Again this only happens when the program runs as a daemon.

June 17, 2013
On Jun 14, 2013, at 2:49 AM, Gary Willoughby <dev@kalekold.net> wrote:

> In fact i have the same problem reading files too. It only reads files up to a certain amount of bytes then crashes in the same manner explained above. Again this only happens when the program runs as a daemon.

Run as a daemon how?
June 17, 2013
> Run as a daemon how?

By running the above code. All the code before opening the file causes the program to run as a daemon.