|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* IOSyncer.cpp created by wgulland on 2000-02-02 */ ! 23: ! 24: #include <IOKit/IOLib.h> ! 25: #include <IOKit/IOSyncer.h> ! 26: ! 27: OSDefineMetaClassAndStructors(IOSyncer, OSObject) ! 28: ! 29: IOSyncer * IOSyncer::create(bool twoRetains) ! 30: { ! 31: IOSyncer * me = new IOSyncer; ! 32: ! 33: if (me && !me->init(twoRetains)) { ! 34: me->release(); ! 35: return 0; ! 36: } ! 37: ! 38: return me; ! 39: } ! 40: ! 41: bool IOSyncer::init(bool twoRetains) ! 42: { ! 43: if (!OSObject::init()) ! 44: return false; ! 45: ! 46: fLock = lock_alloc(true, NULL, NULL); ! 47: ! 48: if(!fLock) ! 49: return false; ! 50: ! 51: lock_write(fLock); ! 52: if(twoRetains) ! 53: retain(); ! 54: ! 55: return true; ! 56: } ! 57: ! 58: void IOSyncer::reinit() ! 59: { ! 60: lock_write(fLock); ! 61: } ! 62: ! 63: void IOSyncer::free() ! 64: { ! 65: if(fLock) ! 66: lock_free(fLock); ! 67: OSObject::free(); ! 68: } ! 69: ! 70: IOReturn IOSyncer::wait(bool autoRelease = true) ! 71: { ! 72: IOReturn result; ! 73: lock_write(fLock); ! 74: lock_done(fLock); ! 75: result = fResult; // Pick up before auto deleting! ! 76: if(autoRelease) ! 77: release(); ! 78: return result; ! 79: } ! 80: ! 81: void IOSyncer::signal(IOReturn res = kIOReturnSuccess, ! 82: bool autoRelease = true) ! 83: { ! 84: fResult = res; ! 85: lock_done(fLock); ! 86: if(autoRelease) ! 87: release(); ! 88: } ! 89:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.