Mercurial > ecos
comparison packages/kernel/current/src/sync/flag.cxx @ 208:e0c0827131d1 ecos
Merge from eCos master repository on 2002-05-20-20:11:54-BST
| author | jlarmour |
|---|---|
| date | Mon, 20 May 2002 22:19:26 +0000 |
| parents | 6ed91473a1cd |
| children | d2c90368aeef |
comparison
equal
deleted
inserted
replaced
| 207:74c807ddde34 | 208:e0c0827131d1 |
|---|---|
| 3 // flag.cxx | 3 // flag.cxx |
| 4 // | 4 // |
| 5 // Flag class implementation | 5 // Flag class implementation |
| 6 // | 6 // |
| 7 //========================================================================== | 7 //========================================================================== |
| 8 //####COPYRIGHTBEGIN#### | 8 //####ECOSGPLCOPYRIGHTBEGIN#### |
| 9 // | 9 // ------------------------------------------- |
| 10 // ------------------------------------------- | 10 // This file is part of eCos, the Embedded Configurable Operating System. |
| 11 // The contents of this file are subject to the Red Hat eCos Public License | 11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. |
| 12 // Version 1.1 (the "License"); you may not use this file except in | 12 // |
| 13 // compliance with the License. You may obtain a copy of the License at | 13 // eCos is free software; you can redistribute it and/or modify it under |
| 14 // http://www.redhat.com/ | 14 // the terms of the GNU General Public License as published by the Free |
| 15 // | 15 // Software Foundation; either version 2 or (at your option) any later version. |
| 16 // Software distributed under the License is distributed on an "AS IS" | 16 // |
| 17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the | 17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY |
| 18 // License for the specific language governing rights and limitations under | 18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| 19 // the License. | 19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| 20 // | 20 // for more details. |
| 21 // The Original Code is eCos - Embedded Configurable Operating System, | 21 // |
| 22 // released September 30, 1998. | 22 // You should have received a copy of the GNU General Public License along |
| 23 // | 23 // with eCos; if not, write to the Free Software Foundation, Inc., |
| 24 // The Initial Developer of the Original Code is Red Hat. | 24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
| 25 // Portions created by Red Hat are | 25 // |
| 26 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc. | 26 // As a special exception, if other files instantiate templates or use macros |
| 27 // All Rights Reserved. | 27 // or inline functions from this file, or you compile this file and link it |
| 28 // ------------------------------------------- | 28 // with other works to produce a work based on this file, this file does not |
| 29 // | 29 // by itself cause the resulting work to be covered by the GNU General Public |
| 30 //####COPYRIGHTEND#### | 30 // License. However the source code for this file must still be made available |
| 31 // in accordance with section (3) of the GNU General Public License. | |
| 32 // | |
| 33 // This exception does not invalidate any other reasons why a work based on | |
| 34 // this file might be covered by the GNU General Public License. | |
| 35 // | |
| 36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. | |
| 37 // at http://sources.redhat.com/ecos/ecos-license | |
| 38 // ------------------------------------------- | |
| 39 //####ECOSGPLCOPYRIGHTEND#### | |
| 31 //========================================================================== | 40 //========================================================================== |
| 32 //#####DESCRIPTIONBEGIN#### | 41 //#####DESCRIPTIONBEGIN#### |
| 33 // | 42 // |
| 34 // Author(s): hmt | 43 // Author(s): hmt |
| 35 // Contributors: hmt | 44 // Contributors: hmt |
| 56 #include <cyg/kernel/clock.inl> // clock inlines | 65 #include <cyg/kernel/clock.inl> // clock inlines |
| 57 | 66 |
| 58 // ------------------------------------------------------------------------- | 67 // ------------------------------------------------------------------------- |
| 59 // Constructor | 68 // Constructor |
| 60 | 69 |
| 61 Cyg_Flag::Cyg_Flag( Cyg_FlagValue init = 0 ) | 70 Cyg_Flag::Cyg_Flag( Cyg_FlagValue init ) |
| 62 { | 71 { |
| 63 CYG_REPORT_FUNCTION(); | 72 CYG_REPORT_FUNCTION(); |
| 64 value = init; | 73 value = init; |
| 65 CYG_REPORT_RETURN(); | 74 CYG_REPORT_RETURN(); |
| 66 } | 75 } |
| 119 | 128 |
| 120 // clear some bits in the value (all of them by default) by ANDing with the | 129 // clear some bits in the value (all of them by default) by ANDing with the |
| 121 // argument. This cannot make a wait condition become true, so there's not | 130 // argument. This cannot make a wait condition become true, so there's not |
| 122 // much to it. | 131 // much to it. |
| 123 void | 132 void |
| 124 Cyg_Flag::maskbits( Cyg_FlagValue arg = 0 ) | 133 Cyg_Flag::maskbits( Cyg_FlagValue arg ) |
| 125 { | 134 { |
| 126 CYG_REPORT_FUNCTION(); | 135 CYG_REPORT_FUNCTION(); |
| 127 | 136 |
| 128 // Prevent preemption | 137 // Prevent preemption |
| 129 Cyg_Scheduler::lock(); | 138 Cyg_Scheduler::lock(); |
| 143 // affected waiting threads; we do the decision making here so as to get | 152 // affected waiting threads; we do the decision making here so as to get |
| 144 // atomicity wrt the other threads waking up - the value might have changed | 153 // atomicity wrt the other threads waking up - the value might have changed |
| 145 // by the time they get to run. | 154 // by the time they get to run. |
| 146 | 155 |
| 147 void | 156 void |
| 148 Cyg_Flag::setbits( Cyg_FlagValue arg = ~0 ) | 157 Cyg_Flag::setbits( Cyg_FlagValue arg ) |
| 149 { | 158 { |
| 150 CYG_REPORT_FUNCTION(); | 159 CYG_REPORT_FUNCTION(); |
| 151 CYG_ASSERTCLASS( this, "Bad this pointer"); | 160 CYG_ASSERTCLASS( this, "Bad this pointer"); |
| 152 | 161 |
| 153 // Prevent preemption | 162 // Prevent preemption |
