Skip to content

Commit

Permalink
Merge pull request #60502 from timothyqiu/sem-api
Browse files Browse the repository at this point in the history
  • Loading branch information
akien-mga authored Apr 25, 2022
2 parents 795fcc4 + 8f0f98f commit 4c47e40
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 2 deletions.
5 changes: 5 additions & 0 deletions core/bind/core_bind.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2613,6 +2613,10 @@ Error _Semaphore::wait() {
return OK; // Can't fail anymore; keep compat
}

Error _Semaphore::try_wait() {
return semaphore.try_wait() ? OK : ERR_BUSY;
}

Error _Semaphore::post() {
semaphore.post();
return OK; // Can't fail anymore; keep compat
Expand All @@ -2621,6 +2625,7 @@ Error _Semaphore::post() {
void _Semaphore::_bind_methods() {
ClassDB::bind_method(D_METHOD("wait"), &_Semaphore::wait);
ClassDB::bind_method(D_METHOD("post"), &_Semaphore::post);
ClassDB::bind_method(D_METHOD("try_wait"), &_Semaphore::try_wait);
}

///////////////
Expand Down
1 change: 1 addition & 0 deletions core/bind/core_bind.h
Original file line number Diff line number Diff line change
Expand Up @@ -680,6 +680,7 @@ class _Semaphore : public Reference {

public:
Error wait();
Error try_wait();
Error post();
};

Expand Down
12 changes: 10 additions & 2 deletions doc/classes/Semaphore.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,21 @@
<method name="post">
<return type="int" enum="Error" />
<description>
Lowers the [Semaphore], allowing one more thread in. Returns [constant OK] on success, [constant ERR_BUSY] otherwise.
Lowers the [Semaphore], allowing one more thread in.
[b]Note:[/b] This method internals' can't possibly fail, but an error code is returned for backwards compatibility, which will always be [constant OK].
</description>
</method>
<method name="try_wait">
<return type="int" enum="Error" />
<description>
Like [method wait], but won't block, so if the value is zero, fails immediately and returns [constant ERR_BUSY]. If non-zero, it returns [constant OK] to report success.
</description>
</method>
<method name="wait">
<return type="int" enum="Error" />
<description>
Tries to wait for the [Semaphore], if its value is zero, blocks until non-zero. Returns [constant OK] on success, [constant ERR_BUSY] otherwise.
Waits for the [Semaphore], if its value is zero, blocks until non-zero.
[b]Note:[/b] This method internals' can't possibly fail, but an error code is returned for backwards compatibility, which will always be [constant OK].
</description>
</method>
</methods>
Expand Down

0 comments on commit 4c47e40

Please sign in to comment.