octave-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Octave-bug-tracker] [bug #54571] gethostname must not be called from wi


From: anonymous
Subject: [Octave-bug-tracker] [bug #54571] gethostname must not be called from within DllMain on Win32 systems
Date: Sat, 25 Aug 2018 10:05:08 -0400 (EDT)
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:61.0) Gecko/20100101 Firefox/61.0

URL:
  <http://savannah.gnu.org/bugs/?54571>

                 Summary: gethostname must not be called from within DllMain
on Win32 systems
                 Project: GNU Octave
            Submitted by: None
            Submitted on: Sat 25 Aug 2018 02:05:06 PM UTC
                Category: Libraries
                Severity: 3 - Normal
                Priority: 5 - Normal
              Item Group: Other
                  Status: None
             Assigned to: None
         Originator Name: Octave user
        Originator Email: 
             Open/Closed: Open
         Discussion Lock: Any
                 Release: 4.4.1
        Operating System: Microsoft Windows

    _______________________________________________________

Details:

According to DllMain
<https://docs.microsoft.com/en-us/windows/desktop/dlls/dllmain> there several
restrictions which functions may be called from within DllMain. Especially
LoadLibrary must not be called directly nor indirectly Dynamic-Link Library
Best Practices
<https://docs.microsoft.com/en-us/windows/desktop/dlls/dynamic-link-library-best-practices>.

Although octave is not providing an implementation of DllMain, it will be
generated by the compiler. Any initialized global or static variable of a Dll
outside of a function will be initialized in DllMain.
For example the following definition in oct-hist.cc will actually call
gethostname from within DllMain:

static std::string Vhistory_timestamp_format_string =
default_history_timestamp_format ();

The behaviour of such a call could be undefined because it depends on other
Dll's which might not be initialized properly if their DllMain has not been
called before. So it might work or might not work depending on the load order
of Dll's.

The patch in the attached file fixes this issue at least in case of
gethostname. It simply delays the call to gethostname until main is called.

As a side effect this patch can reduce start-up time of octave depending on OS
version and system configuration.

Without patch:

$ time /usr/local/bin/octave-cli -qf --eval x=pi
x =  3.1416

real    0m20.470s
user    0m0.000s
sys     0m0.031s


With patch:

$ time /usr/local/bin/octave-cli -qf --eval x=pi
x =  3.1416

real    0m0.485s
user    0m0.016s
sys     0m0.015s





    _______________________________________________________

File Attachments:


-------------------------------------------------------
Date: Sat 25 Aug 2018 02:05:06 PM UTC  Name: octave-gethostname.patch  Size:
2KiB   By: None

<http://savannah.gnu.org/bugs/download.php?file_id=44860>

    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?54571>

_______________________________________________
  Message sent via Savannah
  https://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]