Skip to content

Update python bindings for options - #14

Merged
pranavsharma merged 3 commits into
microsoft:masterfrom
xadupre:master
Nov 30, 2018
Merged

Update python bindings for options#14
pranavsharma merged 3 commits into
microsoft:masterfrom
xadupre:master

Conversation

@xadupre

@xadupre xadupre commented Nov 21, 2018

Copy link
Copy Markdown
Member

No description provided.

@xadupre
xadupre requested a review from a team as a code owner November 28, 2018 10:28
Comment thread onnxruntime/python/onnxruntime_pybind_state.cc
Comment thread onnxruntime/python/onnxruntime_pybind_state.cc
@xadupre

xadupre commented Nov 28, 2018

Copy link
Copy Markdown
Member Author

I triggered a build but GitHub has some difficulties to link it to the PR. Should I create a branch on this repo and not my fork?

@pranavsharma

Copy link
Copy Markdown
Contributor

I triggered a build but GitHub has some difficulties to link it to the PR. Should I create a branch on this repo and not my fork?

How to trigger a build manually for PRs created using forks

  1. Go to https://dev.azure.com/onnxruntime/onnxruntime/_build?definitionId=1
  2. Click on Queue on the top right.
  3. In the "Branch" text box, enter "refs/pull//head". For e.g. "refs/pull/20/head".
  4. Click on Queue.

@pranavsharma
pranavsharma merged commit 1ea32a0 into microsoft:master Nov 30, 2018
tmccrmck pushed a commit to tmccrmck/onnxruntime that referenced this pull request Aug 28, 2019
Enable logging and proper initialize the session
guschmue pushed a commit that referenced this pull request May 19, 2023
* Support LayerNormalization

* Enlarge scale and bias to the rank of input
@lfch lfch mentioned this pull request Oct 13, 2023
@hubin858130 hubin858130 mentioned this pull request Mar 4, 2024
chenfeiyue-cfy pushed a commit to chenfeiyue-cfy/onnxruntime that referenced this pull request Jun 4, 2024
@aarifzafar1 aarifzafar1 mentioned this pull request Dec 9, 2025
quic-muchhsu pushed a commit to CodeLinaro/onnxruntime that referenced this pull request Feb 27, 2026
* Shorten retention period.
* Don't upload artifacts that can be tested on the machine that produced them.
quic-muchhsu pushed a commit to CodeLinaro/onnxruntime that referenced this pull request Feb 27, 2026
* Fix bug where wheel name was not getting wheel name suffix added to it
* Undoes some of storage compromises introduced by microsoft#1 and microsoft#14
yuslepukhin pushed a commit that referenced this pull request Mar 17, 2026
miaobin pushed a commit to miaobin/onnxruntime that referenced this pull request Mar 20, 2026
Support reshape fusion for dynamic shape
tianleiwu added a commit that referenced this pull request Jul 27, 2026
)

### Description

`import onnxruntime` segfaults during `dlopen` of
`onnxruntime_pybind11_state.so` on Linux. This removes the global
initializer in `onnxruntime_pybind_state.cc` that eagerly calls
`Env::Default()`, and resolves the platform `Env` on first use at its
two call sites instead.

### Motivation and Context

The module has a namespace-scope dynamic initializer:

```cpp
static Env& platform_env = Env::Default();
```

Since POSIX telemetry landed (#27379), `Env::Default()` constructs
`PosixEnv`, whose `PosixTelemetry` member initializes the 1DS SDK in its
constructor. That path reads `defaultRuntimeConfig`, a namespace-scope
`static ILogConfiguration` defined in the 1DS SDK's
`RuntimeConfig_Default.hpp`, which lives in a **different translation
unit of the same shared library**.

Dynamic initialization order across translation units is unspecified,
and the pybind TU's initializer runs first. `Variant::merge_map`
therefore iterates a still zero-initialized `std::map`: `_M_node_count
== 0`, but `_M_header._M_left` is `nullptr` rather than self-pointing,
so `begin() != end()` and the loop dereferences null.

Textbook static initialization order fiasco. Backtrace (Release build
relinked without `--strip-all` to recover symbols):

```
#0  std::map<..., Variant>::lower_bound        stl_map.h:1307
#1  std::map<..., Variant>::operator[]         stl_map.h:509
#2  Variant::merge_map                         VariantType.hpp:508
#3  RuntimeConfig_Default::RuntimeConfig_Default  RuntimeConfig_Default.hpp:97
#4  LogManagerImpl::LogManagerImpl             LogManagerImpl.cpp:183
#5  LogManagerFactory::Create                  LogManagerFactory.cpp:36
#6  LogManagerFactory::lease
#7  LogManagerFactory::Get                     LogManagerFactory.hpp:71
#8  LogManagerProvider::Get                    LogManagerProvider.cpp:16
#9  onnxruntime::PosixTelemetry::Initialize()
#10 onnxruntime::PosixTelemetry::PosixTelemetry()
#11 onnxruntime::(anonymous namespace)::PosixEnv::PosixEnv()
#12 onnxruntime::Env::Default()
#13 _GLOBAL__sub_I_onnxruntime_pybind_state.cc
#14 call_init                                  elf/dl-init.c:74
...
#21 _dl_open                                   elf/dl-open.c:905
```

The crash is independent of `LD_LIBRARY_PATH` and `CUDA_VISIBLE_DEVICES`
— it happens before any ORT runtime code runs. `libonnxruntime.so` is
unaffected because it contains no global initializer that reaches
`Env::Default()`, which is why C/C++ and onnxruntime-genai consumers do
not see it.

Both remaining uses of `platform_env` are inside pybind lambdas that run
long after load, so calling `Env::Default()` there is safe. This also
removes the now-stale `TODO: we may delay-init this variable` and a
pre-existing `#pragma warning(push)` that should have been `pop`.

Note for follow-up: `Env::Default()` is now unsafe to call from any
dynamic initializer. This was the only such call site in the tree, but
hardening `PosixTelemetry` to defer SDK initialization out of its
constructor would remove the hazard entirely.

### Tests

Verified on a Linux CUDA 13 Release build (`onnxruntime_USE_TELEMETRY`
enabled):

- `dlopen` of `onnxruntime_pybind11_state.so` succeeds (previously
SIGSEGV).
- `import onnxruntime` reports the version and
`['CUDAExecutionProvider', 'CPUExecutionProvider']`.
- `onnxruntime.enable_telemetry_events()` / `disable_telemetry_events()`
— the two call sites changed here — work.
- CPU and CUDA inference sessions produce correct results.
- Reproduced and verified with `LD_LIBRARY_PATH` unset and
`CUDA_VISIBLE_DEVICES` empty.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants