<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dolphin/Source/Android/jni, branch 2606</title>
<subtitle>GameCube and Wii emulator</subtitle>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/'/>
<entry>
<title>Android: Move alert message log from Kotlin to C++</title>
<updated>2026-05-08T08:56:51+00:00</updated>
<author>
<name>JosJuice</name>
<email>josjuice@gmail.com</email>
</author>
<published>2026-05-01T08:40:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=4470534dc594532714768586c2041d27476ae77f'/>
<id>4470534dc594532714768586c2041d27476ae77f</id>
<content type='text'>
For some reason, NativeLibrary.kt calling Log for the alert message text
makes Dolphin die with a JNI error. Supposedly the jstring passed to the
logging function is invalid. I don't understand why, because the dialog
that we show right afterwards is able to read the string just fine. The
error happens even if I pass the string directly to Log without
prepending any extra text.

There's no real downside to having the logging in C++ instead of Kotlin,
so let's move it to C++ to avoid the JNI error.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
For some reason, NativeLibrary.kt calling Log for the alert message text
makes Dolphin die with a JNI error. Supposedly the jstring passed to the
logging function is invalid. I don't understand why, because the dialog
that we show right afterwards is able to read the string just fine. The
error happens even if I pass the string directly to Log without
prepending any extra text.

There's no real downside to having the logging in C++ instead of Kotlin,
so let's move it to C++ to avoid the JNI error.
</pre>
</div>
</content>
</entry>
<entry>
<title>Android: Remove HostThreadLock</title>
<updated>2026-04-29T16:55:18+00:00</updated>
<author>
<name>JosJuice</name>
<email>josjuice@gmail.com</email>
</author>
<published>2026-04-29T16:55:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=c73dde2193fdb6a78bd1dfaf77bbd6900afbfc92'/>
<id>c73dde2193fdb6a78bd1dfaf77bbd6900afbfc92</id>
<content type='text'>
Follow-up to 068947e. HostThreadLock no longer serves a purpose.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Follow-up to 068947e. HostThreadLock no longer serves a purpose.
</pre>
</div>
</content>
</entry>
<entry>
<title>GCAdapter: Automatically start and stop thread</title>
<updated>2026-04-18T17:40:25+00:00</updated>
<author>
<name>JosJuice</name>
<email>josjuice@gmail.com</email>
</author>
<published>2026-04-18T14:56:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=cc01a603474b66053a2cf5a6104ff637ed144cfe'/>
<id>cc01a603474b66053a2cf5a6104ff637ed144cfe</id>
<content type='text'>
This keeps the logic encapsulated inside GCAdapter.cpp so callers don't
have to think about it.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This keeps the logic encapsulated inside GCAdapter.cpp so callers don't
have to think about it.
</pre>
</div>
</content>
</entry>
<entry>
<title>Improve NAND import progress dialog</title>
<updated>2026-04-04T21:02:45+00:00</updated>
<author>
<name>Tillmann Karras</name>
<email>tilkax@gmail.com</email>
</author>
<published>2026-04-03T22:50:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=f06aef4f8382d258e16bac2ea8a19aa48dda72a0'/>
<id>f06aef4f8382d258e16bac2ea8a19aa48dda72a0</id>
<content type='text'>
Now with cancel button and an actual progress bar. For simplicity, we do
two passes on the progress bar, one for loading the NAND into memory and
one for extracting it. The user directory is likely on an SSD, making
the extraction pass invisibly fast.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Now with cancel button and an actual progress bar. For simplicity, we do
two passes on the progress bar, one for loading the NAND into memory and
one for extracting it. The user directory is likely on an SSD, making
the extraction pass invisibly fast.
</pre>
</div>
</content>
</entry>
<entry>
<title>DolphinQt: Improve Gecko code download failure message</title>
<updated>2026-03-03T16:09:39+00:00</updated>
<author>
<name>Simonx22</name>
<email>simon@oatmealdome.me</email>
</author>
<published>2026-02-28T16:12:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=d2e381090cffaa972a17be1f5b6dad7bdc12a373'/>
<id>d2e381090cffaa972a17be1f5b6dad7bdc12a373</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Explicitly transfer control of SYSCONF to emulated system</title>
<updated>2026-02-14T09:05:27+00:00</updated>
<author>
<name>JosJuice</name>
<email>josjuice@gmail.com</email>
</author>
<published>2024-07-06T21:31:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=5440c7737fdc39b17656d437c25bf6cb9f369dbe'/>
<id>5440c7737fdc39b17656d437c25bf6cb9f369dbe</id>
<content type='text'>
The functions SaveToSYSCONF and LoadFromSYSCONF contain checks for
whether emulation is running. The intent of this is that when we're
emulating a Wii, the emulated system may write to SYSCONF whenever it
likes and does not expect anything else to write to SYSCONF, so the
host code shouldn't access SYSCONF while emulation is ongoing. However,
Core::IsRunning is an imperfect proxy for whether we've handed over
control of SYSCONF to the emulated system yet, as the actual handover
happens at a slightly different point in time than when the emulation
state is changed. This usually isn't a problem, but in theory it could
be a determinism problem if a setting is changed right as emulation is
starting, or it could cause the emulated software to briefly misbehave
if a setting is changed right as emulation is stopping.

Things got worse in 72cf2bdb87f09deff22e1085de3290126aa4ad05 when I
replaced the Core::IsRunning calls with !Core::IsUninitialized. With
IsRunning, there was be a period of time where SYSCONF should have been
protected but wasn't. With !IsUninitialized, there was a period of time
where SYSCONF shouldn't have been protected but was, and crucially, this
period of time included the moments where we do setup and teardown of
the emulated NAND, which broke transferring SYSCONF settings between the
host and the guest. 72cf2bdb87f09deff22e1085de3290126aa4ad05 was
reverted because of this.

This commit adds a flag that we explicitly flip when control is handed
over to or from the emulated system. This protects the SYSCONF file
for exactly as long as is needed.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The functions SaveToSYSCONF and LoadFromSYSCONF contain checks for
whether emulation is running. The intent of this is that when we're
emulating a Wii, the emulated system may write to SYSCONF whenever it
likes and does not expect anything else to write to SYSCONF, so the
host code shouldn't access SYSCONF while emulation is ongoing. However,
Core::IsRunning is an imperfect proxy for whether we've handed over
control of SYSCONF to the emulated system yet, as the actual handover
happens at a slightly different point in time than when the emulation
state is changed. This usually isn't a problem, but in theory it could
be a determinism problem if a setting is changed right as emulation is
starting, or it could cause the emulated software to briefly misbehave
if a setting is changed right as emulation is stopping.

Things got worse in 72cf2bdb87f09deff22e1085de3290126aa4ad05 when I
replaced the Core::IsRunning calls with !Core::IsUninitialized. With
IsRunning, there was be a period of time where SYSCONF should have been
protected but wasn't. With !IsUninitialized, there was a period of time
where SYSCONF shouldn't have been protected but was, and crucially, this
period of time included the moments where we do setup and teardown of
the emulated NAND, which broke transferring SYSCONF settings between the
host and the guest. 72cf2bdb87f09deff22e1085de3290126aa4ad05 was
reverted because of this.

This commit adds a flag that we explicitly flip when control is handed
over to or from the emulated system. This protects the SYSCONF file
for exactly as long as is needed.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #13594 from jordan-woyak/state-cleanups</title>
<updated>2026-02-03T22:50:52+00:00</updated>
<author>
<name>Jordan Woyak</name>
<email>jordan.woyak@gmail.com</email>
</author>
<published>2026-02-03T22:50:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=dd2b94cd4a71fb6abda72f58d27434ef2d8b0a5f'/>
<id>dd2b94cd4a71fb6abda72f58d27434ef2d8b0a5f</id>
<content type='text'>
State: Simplify interthread communication and general cleanups.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
State: Simplify interthread communication and general cleanups.</pre>
</div>
</content>
</entry>
<entry>
<title>Remove VectorToJStringArray</title>
<updated>2026-01-24T15:50:10+00:00</updated>
<author>
<name>Sintendo</name>
<email>3380580+Sintendo@users.noreply.github.com</email>
</author>
<published>2025-12-26T20:57:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=60ca0626dfc2a59cc2e8145d0ee5c7d95f7d0ab5'/>
<id>60ca0626dfc2a59cc2e8145d0ee5c7d95f7d0ab5</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Common/FileSearch: Refactor DoFileSearch</title>
<updated>2026-01-24T15:50:10+00:00</updated>
<author>
<name>Sintendo</name>
<email>3380580+Sintendo@users.noreply.github.com</email>
</author>
<published>2025-12-24T09:14:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=f2e1c71803b953c9adb9528c168cbbde23b3b30a'/>
<id>f2e1c71803b953c9adb9528c168cbbde23b3b30a</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>State: Simplify interthread communication and cleanups. Save/Load calls are now always non-blocking for the caller, but appropriately block the CPU thread as needed.</title>
<updated>2026-01-20T03:56:59+00:00</updated>
<author>
<name>Jordan Woyak</name>
<email>jordan.woyak@gmail.com</email>
</author>
<published>2025-11-03T04:21:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=2322437f96bc53f1edcd9100daedb5b54c6e0fc4'/>
<id>2322437f96bc53f1edcd9100daedb5b54c6e0fc4</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
