1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: condition.cxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
32 #include <salhelper/condition.hxx>
36 using namespace salhelper
;
39 /******************************************************************
43 ******************************************************************/
45 Condition::Condition(osl::Mutex
& aMutex
)
47 m_aCondition(osl_createCondition())
52 Condition::~Condition()
54 osl_destroyCondition(m_aCondition
);
58 /******************************************************************
62 ******************************************************************/
64 ConditionModifier::ConditionModifier(Condition
& aCond
)
67 m_aCond
.m_aMutex
.acquire();
71 ConditionModifier::~ConditionModifier()
74 osl_setCondition(m_aCond
.m_aCondition
);
76 m_aCond
.m_aMutex
.release();
81 /******************************************************************
85 ******************************************************************/
87 ConditionWaiter::timedout::timedout() {}
89 ConditionWaiter::timedout::timedout(timedout
const &) {}
91 ConditionWaiter::timedout::~timedout() {}
93 ConditionWaiter::timedout
&
94 ConditionWaiter::timedout::operator =(timedout
const &) { return *this; }
96 ConditionWaiter::ConditionWaiter(Condition
& aCond
)
100 osl_waitCondition(m_aCond
.m_aCondition
,0);
101 m_aCond
.m_aMutex
.acquire();
103 if(m_aCond
.applies())
106 osl_resetCondition(m_aCond
.m_aCondition
);
107 m_aCond
.m_aMutex
.release();
113 ConditionWaiter::ConditionWaiter(Condition
& aCond
,sal_uInt32 milliSec
)
115 ConditionWaiter::timedout
120 aTime
.Seconds
= milliSec
/ 1000;
121 aTime
.Nanosec
= 1000000 * ( milliSec
% 1000 );
124 if( osl_waitCondition(m_aCond
.m_aCondition
,&aTime
) ==
125 osl_cond_result_timeout
)
128 m_aCond
.m_aMutex
.acquire();
130 if(m_aCond
.applies())
133 osl_resetCondition(m_aCond
.m_aCondition
);
134 m_aCond
.m_aMutex
.release();
140 ConditionWaiter::~ConditionWaiter()
142 if(! m_aCond
.applies())
143 osl_resetCondition(m_aCond
.m_aCondition
);
144 m_aCond
.m_aMutex
.release();