thread_cancellation.hpp

Go to the documentation of this file.
00001 /*********************************************************************/
00002 // dar - disk archive - a backup/restoration program
00003 // Copyright (C) 2002-2052 Denis Corbin
00004 //
00005 // This program is free software; you can redistribute it and/or
00006 // modify it under the terms of the GNU General Public License
00007 // as published by the Free Software Foundation; either version 2
00008 // of the License, or (at your option) any later version.
00009 //
00010 // This program is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 // GNU General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU General Public License
00016 // along with this program; if not, write to the Free Software
00017 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00018 //
00019 // to contact the author : dar.linux@free.fr
00020 /*********************************************************************/
00021 // $Id: thread_cancellation.hpp,v 1.5.2.3 2006/04/20 13:34:14 edrusb Rel $
00022 //
00023 /*********************************************************************/
00024 
00036 
00037 #ifndef THREAD_CANCELLATION_HPP
00038 #define THREAD_CANCELLATION_HPP
00039 
00040 #include "../my_config.h"
00041 
00042 extern "C"
00043 {
00044 #if MUTEX_WORKS
00045 #if HAVE_PTHREAD_H
00046 #include <pthread.h>
00047 #endif
00048 #endif
00049 }
00050 #include <list>
00051 #include "integers.hpp"
00052 
00053 namespace libdar
00054 {
00055 
00057 
00064 
00065     class thread_cancellation
00066     {
00067     public:
00068 
00070         thread_cancellation();
00071 
00073         virtual ~thread_cancellation();
00074 
00076 
00079         void check_self_cancellation() const;
00080 
00083 
00087         void block_delayed_cancellation(bool mode);
00088 
00089 
00091 
00093         static void init();
00094 
00095 
00096 #if MUTEX_WORKS
00098 
00103         static void cancel(pthread_t tid, bool x_immediate, U_64 x_flag);
00104 
00106 
00109         static bool cancel_status(pthread_t tid);
00110 
00112 
00115         static bool clear_pending_request(pthread_t tid);
00116 #endif
00117 
00119         static U_I count()
00120         {
00121 #if MUTEX_WORKS
00122             return info.size();
00123 #else
00124             return 0;
00125 #endif
00126         };
00127 
00128 #if MUTEX_WORKS
00129     private:
00130 
00131             // class types
00132 
00133         struct fields
00134         {
00135             pthread_t tid;             
00136             bool block_delayed;        
00137             bool immediate;            
00138             bool cancellation;         
00139             U_64 flag;                 
00140         };
00141 
00142             // object information
00143 
00144         fields status;
00145 
00146             // class's static variables and types
00147 
00148         static pthread_mutex_t access;         
00149         static bool initialized;               
00150         static std::list<thread_cancellation *> info;  
00151         static std::list<fields> preborn;      
00152 
00153 #endif
00154     };
00155 
00156 } // end of namespace
00157 
00158 #endif

Generated on Fri Nov 17 01:43:09 2006 for Disk ARchive by  doxygen 1.5.1