added some experimental code
This commit is contained in:
parent
7b114e3b27
commit
0d40016fa1
@ -160,7 +160,11 @@ method(#class,#abstract) xxx. => method(#class) xxx { self subclassResponsibilit
|
|||||||
{
|
{
|
||||||
| x |
|
| x |
|
||||||
x := self _wait.
|
x := self _wait.
|
||||||
if (x signalAction notNil) { x signalAction value: x }.
|
if (x notError)
|
||||||
|
{
|
||||||
|
## TODO: is it better to check if x is an instance of Semaphore/SemaphoreGroup?
|
||||||
|
if (x signalAction notNil) { x signalAction value: x }.
|
||||||
|
}.
|
||||||
^x
|
^x
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -612,7 +612,7 @@ error -> exception
|
|||||||
].
|
].
|
||||||
|
|
||||||
[
|
[
|
||||||
| s s2 st |
|
| s s2 st sg |
|
||||||
[
|
[
|
||||||
s := Socket domain: Socket.Domain.INET type: Socket.Type.STREAM.
|
s := Socket domain: Socket.Domain.INET type: Socket.Type.STREAM.
|
||||||
##s connect: (SocketAddress fromString: '127.0.0.1:9999') do: conact.
|
##s connect: (SocketAddress fromString: '127.0.0.1:9999') do: conact.
|
||||||
@ -624,13 +624,25 @@ error -> exception
|
|||||||
## ###s2 listen: 10; watchInput.
|
## ###s2 listen: 10; watchInput.
|
||||||
## s2 listen: 10 do: accact.
|
## s2 listen: 10 do: accact.
|
||||||
|
|
||||||
|
st := Semaphore new.
|
||||||
|
System addAsyncSemaphore: st.
|
||||||
|
System signal: st afterSecs: 5.
|
||||||
|
'JJJJJJJJJJJ' dump.
|
||||||
|
sg := SemaphoreGroup new.
|
||||||
|
'JJJJJJJJJJJ' dump.
|
||||||
|
sg wait.
|
||||||
|
'YYYYYYYYYYYYYYY' dump.
|
||||||
|
|
||||||
###[ while (1) { '1111' dump. System sleepForSecs: 1 } ] fork.
|
###[ while (1) { '1111' dump. System sleepForSecs: 1 } ] fork.
|
||||||
|
|
||||||
|
st := Semaphore new.
|
||||||
|
System addAsyncSemaphore: st.
|
||||||
|
System signal: st afterSecs: 20.
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
if (System handleAsyncEvent isError) { break }.
|
if (System handleAsyncEvent isError) { break }.
|
||||||
}.
|
}.
|
||||||
|
|
||||||
]
|
]
|
||||||
ensure:
|
ensure:
|
||||||
[
|
[
|
||||||
|
@ -937,11 +937,11 @@ static MOO_INLINE moo_oop_t await_semaphore_group (moo_t* moo, moo_oop_semaphore
|
|||||||
return (moo_oop_t)sem;
|
return (moo_oop_t)sem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*MOO_DEBUG1 (moo, "QQQQQQQQQQQQQQQQQQQQQQQ %d\n", semgrp->sem_io_count);
|
MOO_DEBUG1 (moo, "QQQQQQQQQQQQQQQQQQQQQQQ %d\n", semgrp->sem_io_count);
|
||||||
if (MOO_OOP_TO_SMOOI(semgrp->sem_io_count) <= 0)
|
if (MOO_OOP_TO_SMOOI(semgrp->sem_io_count) <= 0)
|
||||||
{
|
{
|
||||||
return MOO_ERROR_TO_OOP(MOO_EIOERR);
|
//return MOO_ERROR_TO_OOP(MOO_EIOERR);
|
||||||
}*/
|
}
|
||||||
|
|
||||||
/* no semaphores have been signaled. suspend the current process
|
/* no semaphores have been signaled. suspend the current process
|
||||||
* until at least one of them is signaled */
|
* until at least one of them is signaled */
|
||||||
@ -4034,7 +4034,7 @@ static MOO_INLINE int switch_process_if_needed (moo_t* moo)
|
|||||||
/* [NOTE] no moo_pushtmp() on proc. no GC must occur
|
/* [NOTE] no moo_pushtmp() on proc. no GC must occur
|
||||||
* in the following line until it's used for
|
* in the following line until it's used for
|
||||||
* wake_process() below. */
|
* wake_process() below. */
|
||||||
delete_from_sem_heap (moo, 0); /* moo->sem_heap_count is decremented */
|
delete_from_sem_heap (moo, 0); /* moo->sem_heap_count is decremented in delete_from_sem_heap() */
|
||||||
|
|
||||||
/* if no process is waiting on the semaphore,
|
/* if no process is waiting on the semaphore,
|
||||||
* signal_semaphore() returns moo->_nil. */
|
* signal_semaphore() returns moo->_nil. */
|
||||||
|
Loading…
Reference in New Issue
Block a user