www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Mac OS crash, details inside...

reply "Gary Willoughby" <dev kalekold.net> writes:
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_D3std7process9pipeShellFNfAyaE3std7process8RedirectxHAyaAyaE3std7process6ConfigZS3std7process12ProcessPipesTAyaZ11executeImplFAyaxHAyaAyaE3std7process6Con
igmZ13ProcessOutput 
+ 466
4   main                              0x000000010f78fd39 
D3std7process12executeShellFNeAyaxHAyaAyaE3std7process6ConfigmZS3std7process133__T11executeImplS108_D3std7process9pipeShellFNfAyaE3std7process8RedirectxHAyaAyaE3std7process6ConfigZS3std7process12ProcessPipesTAyaZ11executeImplFAyaxHAyaAyaE3std7process6Con
igmZ13ProcessOutput 
+ 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
Jun 13 2013
parent reply Jacob Carlborg <doob me.com> writes:
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
Jun 14 2013
parent reply "Gary Willoughby" <dev kalekold.net> writes:
 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.
Jun 14 2013
parent reply "Gary Willoughby" <dev kalekold.net> writes:
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.
Jun 14 2013
parent reply Sean Kelly <sean invisibleduck.org> writes:
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?=
Jun 17 2013
parent "Gary Willoughby" <Dev kalekold.net> writes:
 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.
Jun 17 2013