A partial liberate statement sets the available state of an event to AVAILABLE, but leaves the happened state unchanged. The process performing the partial liberate statement continues execution normally. The partial liberate statement differs from a liberate statement in that it does not cause waiting processes to resume execution. Any processes that previously had executed a wait statement or an unconditional procure statement will continue to wait indefinitely. However, because the partial liberate statement changes the event to AVAILABLE, the event can be procured by procure statements executed after the partial liberate statement.
You should be very careful when using the partial liberate statement. You need to either cause or liberate the event eventually so that the processes that are waiting on the event can resume. (The cause statement is discussed under Causing an Event later in this section.) However, because the partial liberate statement changes the state to AVAILABLE, another process could procure the event before the first process fully liberates it. Unless you design the code carefully, two different processes might accidentally use the resource flagged by the event at the same time.
In ALGOL, the partial liberate statement is called FREE. The following is an example of this statement:
FREE (E1);
The partial liberate statement can also be used as a function that returns a Boolean value. If the event is already AVAILABLE, a value of FALSE is returned. If the event is NOT AVAILABLE, a value of TRUE is returned, and the event is set to AVAILABLE. The following ALGOL statement partially liberates event E1 and stores the result in BOOL:
BOOL:= FREE (E1);
The partial liberate statement is not available in COBOL.

