<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Quick update - looks like it's not the hardware API at all, and I
    guess not erlang either, but Objective-C/Foundation stuff related to
    how I was initialising CFStringRef values whose addresses I passed
    to the API call. I was using a CFSTR macro that I took from an Apple
    code sample; now I'm using a CFString function to do it and it's
    working fine across the erlang & OS versions.<br>
    <br>
    I'm a bit baffled as to why the macro was working at all on R18, and
    why it still works in the minimal C program version, as it looks to
    me like it returns an immutable string ref; maybe it shouldn't work,
    but like I say, I took it from an Apple sample. I plan to look into
    that a bit more deeply.<br>
    <br>
    I'm also pretty baffled as to why the different erlang &
    OS/compiler versions made this manifest, when it wasn't previously -
    but regardless, taking it out seems to have side-stepped the
    problem.<br>
    <br>
    Thanks everyone,<br>
    <br>
    best,<br>
    Igor<br>
    <br>
    <div class="moz-cite-prefix">On 19/04/2017 13:33, Igor Clark wrote:<br>
    </div>
    <blockquote
      cite="mid:ea67b83d-11e5-f19e-87e9-b8b92e937b41@gmail.com"
      type="cite">
      <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
      Hi folks, just checking in, I wonder if anyone has any further
      thoughts about this?<br>
      <br>
      To re-state: the identical Mac OS C API call inside a NIF succeeds
      (returns a valid string property) on R18/El Capitan, fails
      (returns null) inside the same NIF on R19/El Capitan &
      R18/R19/Sierra, yet succeeds in a minimal C program on both El
      Capitan (clang/LLVM 8.0.0) and Sierra (clang/LLVM 8.1.0). In all
      cases this happens regardless of whether the C API call is made
      inside the main thread or a separate thread.<br>
      <br>
      Would be really grateful for any suggestions, as this is way
      lower-level than I'm familiar with - happy to dig around further,
      but a bit lost where to look next.<br>
      <br>
      Thanks!<br>
      Igor<br>
      <br>
      <div class="moz-cite-prefix">On 18/04/2017 07:54, Igor Clark
        wrote:<br>
      </div>
      <blockquote
cite="mid:CADskkxw4EGOARo99qrirh+NHkH-3-BT5A_mfK6nW3NA-NVcUFA@mail.gmail.com"
        type="cite">
        <div dir="ltr">Sorry, to be clearer, that should have read "<span
            style="font-size:12.800000190734863px">when run in a
            separate thread in the NIF using enif_thread_create(), the
            API call succeeds under R18 on El Capitan, fails under R19
            on El Capitan, and fails under R18 and R19 on Sierra".</span></div>
        <div class="gmail_extra"><br>
          <div class="gmail_quote">On Tue, Apr 18, 2017 at 7:52 AM, Igor
            Clark <span dir="ltr"><<a moz-do-not-send="true"
                href="mailto:igor.clark@gmail.com" target="_blank">igor.clark@gmail.com</a>></span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div bgcolor="#FFFFFF" text="#000000"> Thanks Paul and
                Daniel,<br>
                <br>
                Just tested this: the exact same thing happens with
                threads as without. The API call succeeds when run in a
                separate thread in the minimal C program using
                pthread_create(), on both El Capitan and Sierra; when
                run in a separate thread in the NIF using
                enif_thread_create(), the API call succeeds under R18 on
                El Capitan and fails under R19.<br>
                    <br>
                (My NIF code hasn't been explicitly creating or using
                any threads at all until now, if that makes any
                difference.)<br>
                <br>
                Does that give any further clues?<br>
                <br>
                Cheers,<br>
                Igor
                <div>
                  <div class="h5"><br>
                    <br>
                    <div class="m_2753930781096260743moz-cite-prefix">On
                      18/04/2017 03:47, Daniel Goertzen wrote:<br>
                    </div>
                    <blockquote type="cite">
                      <div dir="ltr">Following Paul's idea, what happens
                        in both the NIF and your minimal C program if
                        you first launch a new thread and call the API
                        from there?</div>
                      <br>
                      <div class="gmail_quote">
                        <div dir="ltr">On Mon, Apr 17, 2017 at 5:52 PM
                          Fisher, Paul <<a moz-do-not-send="true"
                            href="mailto:pfisher@alertlogic.com"
                            target="_blank">pfisher@alertlogic.com</a>>
                          wrote:<br>
                        </div>
                        <blockquote class="gmail_quote" style="margin:0
                          0 0 .8ex;border-left:1px #ccc
                          solid;padding-left:1ex">
                          <div>
                            <div>
                              <div
                                id="m_2753930781096260743m_-2395972316349742208x_compose-container"
                                style="direction:ltr"> <span><span></span></span>
                                <div>
                                  <div style="direction:ltr">Complete
                                    wild guess, but is there a
                                    difference in nif initialization
                                    running off the main thread in
                                    non-working version? This would be a
                                    problem for some low-level Mach
                                    related things. Not near laptop to
                                    look through the code to see if that
                                    changed.</div>
                                  <div><br>
                                  </div>
                                  <div><br>
                                  </div>
                                  <div
                                    class="m_2753930781096260743m_-2395972316349742208x_acompli_signature">Get
                                    <a moz-do-not-send="true"
                                      href="https://aka.ms/o0ukef"
                                      target="_blank">Outlook for iOS</a></div>
                                </div>
                              </div>
                              <hr style="display:inline-block;width:98%">
                              <div
                                id="m_2753930781096260743m_-2395972316349742208x_divRplyFwdMsg"
                                dir="ltr"><font style="font-size:11pt"
                                  face="Calibri, sans-serif"
                                  color="#000000"><b>From:</b> <a
                                    moz-do-not-send="true"
                                    href="mailto:erlang-questions-bounces@erlang.org"
                                    target="_blank">erlang-questions-bounces@<wbr>erlang.org</a>
                                  <<a moz-do-not-send="true"
                                    href="mailto:erlang-questions-bounces@erlang.org"
                                    target="_blank">erlang-questions-bounces@<wbr>erlang.org</a>>
                                  on behalf of Igor Clark <<a
                                    moz-do-not-send="true"
                                    href="mailto:igor.clark@gmail.com"
                                    target="_blank">igor.clark@gmail.com</a>><br>
                                  <b>Sent:</b> Monday, April 17, 2017
                                  4:38:11 PM<br>
                                  <b>To:</b> <a moz-do-not-send="true"
href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
                                  <b>Subject:</b> [erlang-questions]
                                  NIF+device problem moving R18->R19
                                  / Mac 10.11->10.12</font>
                                <div> </div>
                              </div>
                            </div>
                            <font size="2"><span style="font-size:10pt">
                              </span></font></div>
                          <div><font size="2"><span
                                style="font-size:10pt">
                                <div
                                  class="m_2753930781096260743m_-2395972316349742208PlainText">Hi
                                  all,<br>
                                  <br>
                                  I'm having problems updating a NIF to
                                  work correctly with R19 and/or <br>
                                  MacOS Sierra (10.12). The NIF uses Mac
                                  OS C API calls to talk to some <br>
                                  hardware. It's been working just fine
                                  with R18 on El Capitan, but it <br>
                                  fails in a manner I don't understand
                                  when I trying to run it on R19 or <br>
                                  Sierra. I'm pretty baffled as to
                                  what's going on, and wonder if any of
                                  <br>
                                  the following might ring bells or set
                                  off a spider-sense for anyone here?<br>
                                  <br>
                                  - The code continues to work 100% as
                                  expected on R18 / Mac OS El Capitan <br>
                                  (10.11), as it has for the last year
                                  or so.<br>
                                  <br>
                                  - On R19 on El Capitan, 99% of the C
                                  code works as before, but one <br>
                                  particular MacOS C API call fails
                                  unexpectedly. It doesn't crash or <br>
                                  cause errors directly, but it returns
                                  null instead of a valid value as <br>
                                  before. There are no build errors or
                                  warnings. (I'm using 'pc' plugin <br>
                                  version 1.5.0 with rebar3). Other
                                  MacOS API calls talking to the same <br>
                                  hardware work as expected, sending
                                  correct commands, getting the <br>
                                  hardware to carry out operations as
                                  expected and returning expected <br>
                                  values, without any problems.<br>
                                  <br>
                                  - On both R18 & R19 on Sierra,
                                  exactly the same problem occurs as
                                  above <br>
                                  in R19 on El Capitan.<br>
                                  <br>
                                  - If I make the failing/null-returning
                                  OS API call in a plain, <br>
                                  simple-as-possible C file compiled
                                  with gcc (Apple LLVM/clang), it works
                                  <br>
                                  as expected, *on both OS versions*.<br>
                                  <br>
                                  - If I paste that same
                                  simple-as-possible C code verbatim
                                  into the NIF, <br>
                                  as the first line in the load()
                                  function, and run it on R18/El
                                  Capitan, <br>
                                  it continues to work as expected.<br>
                                  <br>
                                  - If I then try to run that identical
                                  pasted-verbatim NIF code with no <br>
                                  changes on R18/Sierra or on R19 &
                                  either OS version, this one particular
                                  <br>
                                  function call fails, as above.<br>
                                  <br>
                                  I realise it could be many things, and
                                  my initial thought was that it <br>
                                  must be the OS change or even the
                                  hardware failing - but the hardware <br>
                                  and C API call continue to work just
                                  fine on both OS versions when the <br>
                                  NIF stuff is taken out of the picture,
                                  and on El Capitan, the <br>
                                  previously-not-happening problem
                                  reliably (and only) starts happening <br>
                                  when I switch from R18 to R19.<br>
                                  <br>
                                  Did anything change between R18 and
                                  R19 that might somehow make some, <br>
                                  but not all, external C function calls
                                  fail on El Capitan/clang 8.0.0? <br>
                                  And could that be something that also
                                  makes the same thing happen on <br>
                                  both R18 and R19 under Sierra/clang
                                  8.1.0? Could it perhaps be something <br>
                                  do with the port compiler & LD/CXX
                                  flags?<br>
                                  <br>
                                  Any ideas as to where else I could
                                  look to try to track this down, or <br>
                                  what might be causing this?<br>
                                  <br>
                                  (BTW, I'm using homebrew erlang, and
                                  I've tried all the above with <br>
                                  versions 18.1, 18.3, 19.0.2 and 19.3
                                  on both OS versions. The gcc/clang <br>
                                  version on El Capitan is from Xcode
                                  8.1, "Apple LLVM version 8.0.0 <br>
                                  (clang-800.0.42.1)". On Sierra it's
                                  from Xcode 8.3.1, "Apple LLVM <br>
                                  version 8.1.0 (clang-802.0.41)" - but
                                  as above, the plain/non-NIF C code <br>
                                  works perfectly and identically on
                                  both versions.)<br>
                                  <br>
                                  Thanks very much,<br>
                                  Igor<br>
                                  ______________________________<wbr>_________________<br>
                                  erlang-questions mailing list<br>
                                  <a moz-do-not-send="true"
                                    href="mailto:erlang-questions@erlang.org"
                                    target="_blank">erlang-questions@erlang.org</a><br>
                                </div>
                              </span></font></div>
                          <div><font size="2"><span
                                style="font-size:10pt">
                                <div
                                  class="m_2753930781096260743m_-2395972316349742208PlainText"><a
                                    moz-do-not-send="true"
href="https://urldefense.proofpoint.com/v2/url?u=http-3A__erlang.org_mailman_listinfo_erlang-2Dquestions&d=DwICAg&c=L_h2OePR2UWWefmqrezxOsP9Uqw55rRfX5bRtw9S4KY&r=PevFox_7LK44ZV_jlS5jRM2WItKtsHV4zN_CrbdT2aM&m=VYIypVbNEBkrDndUBzmlPhRtnzb4ZWIKbuytw-ZNFsQ&s=jm04c9Iw58-WmaHYaGFw-a9XQ3sFl2wqkf7RhdBDC6E&e="
                                    target="_blank">https://urldefense.proofpoint.<wbr>com/v2/url?u=http-3A__erlang.<wbr>org_mailman_listinfo_erlang-<wbr>2Dquestions&d=DwICAg&c=L_<wbr>h2OePR2UWWefmqrezxOsP9Uqw55rRf<wbr>X5bRtw9S4KY&r=PevFox_7LK44ZV_<wbr>jlS5jRM2WItKtsHV4zN_CrbdT2aM&<wbr>m=<wbr>VYIypVbNEBkrDndUBzmlPhRtnzb4ZW<wbr>IKbuytw-ZNFsQ&s=jm04c9Iw58-<wbr>WmaHYaGFw-<wbr>a9XQ3sFl2wqkf7RhdBDC6E&e=</a>
                                  <br>
                                </div>
                              </span></font>Confidentiality Notice |
                            This email and any included attachments may
                            be privileged, confidential and/or otherwise
                            protected from disclosure. Access to this
                            email by anyone other than the intended
                            recipient is unauthorized. If you believe
                            you have received this email in error,
                            please contact the sender immediately and
                            delete all copies. If you are not the
                            intended recipient, you are notified that
                            disclosing, copying, distributing or taking
                            any action in reliance on the contents of
                            this information is strictly prohibited. </div>
                          ______________________________<wbr>_________________<br>
                          erlang-questions mailing list<br>
                          <a moz-do-not-send="true"
                            href="mailto:erlang-questions@erlang.org"
                            target="_blank">erlang-questions@erlang.org</a><br>
                          <a moz-do-not-send="true"
                            href="http://erlang.org/mailman/listinfo/erlang-questions"
                            rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
                        </blockquote>
                      </div>
                    </blockquote>
                    <br>
                  </div>
                </div>
              </div>
            </blockquote>
          </div>
          <br>
        </div>
      </blockquote>
      <br>
    </blockquote>
    <br>
  </body>
</html>