Patch title: Release 84 bulk changes
Abstract:
File: /pliant/language/schedule/sem.pli
Key:
    Removed line
    Added line
   
# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
#
# This program is free software; you can redistribute it and
# modify it under the terms of the GNU General Public Licens
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be us
# but WITHOUT ANY WARRANTY; without even the implied warrant
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See 
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public 
# version 2 along with this program; if not, write to the Fr
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 


method sem nowait_rd_request -> success
  arg_rw Sem sem ; arg CBool success
  if trivial_yield_policy
    var uInt s := atomic_read_and_set sem:status please_retr
    if s<>write_locked and s<>please_retry
      sem status := s+1
      success := true
    else
      if s<>please_retry
        sem status := s
      success := false
  else
    var uInt s := sem safe_read_status
    if s<>write_locked and sem:queue:is_empty
      sem status := s+1
      success := true
    else
      sem status := s
      success := false
# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
#
# This program is free software; you can redistribute it and
# modify it under the terms of the GNU General Public Licens
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be us
# but WITHOUT ANY WARRANTY; without even the implied warrant
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See 
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public 
# version 2 along with this program; if not, write to the Fr
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 


method sem nowait_rd_request -> success
  arg_rw Sem sem ; arg CBool success
  if trivial_yield_policy
    var uInt s := atomic_read_and_set sem:status please_retr
    if s<>write_locked and s<>please_retry
      sem status := s+1
      success := true
    else
      if s<>please_retry
        sem status := s
      success := false
  else
    var uInt s := sem safe_read_status
    if s<>write_locked and sem:queue:is_empty
      sem status := s+1
      success := true
    else
      sem status := s
      success := false
     


  
export Sem '. request' '. release' '. rd_request' '. rd_rele

export Sem '. request' '. release' '. rd_request' '. rd_rele