xrootd
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
XrdSsiEvent.hh
Go to the documentation of this file.
1 #ifndef __XRDSSIEVENT_HH__
2 #define __XRDSSIEVENT_HH__
3 /******************************************************************************/
4 /* */
5 /* X r d S s i E v e n t . h h */
6 /* */
7 /* (c) 2015 by the Board of Trustees of the Leland Stanford, Jr., University */
8 /* Produced by Andrew Hanushevsky for Stanford University under contract */
9 /* DE-AC02-76-SFO0515 with the Department of Energy */
10 /* */
11 /* This file is part of the XRootD software suite. */
12 /* */
13 /* XRootD is free software: you can redistribute it and/or modify it under */
14 /* the terms of the GNU Lesser General Public License as published by the */
15 /* Free Software Foundation, either version 3 of the License, or (at your */
16 /* option) any later version. */
17 /* */
18 /* XRootD is distributed in the hope that it will be useful, but WITHOUT */
19 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
20 /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
21 /* License for more details. */
22 /* */
23 /* You should have received a copy of the GNU Lesser General Public License */
24 /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
25 /* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
26 /* */
27 /* The copyright holder's institutional names and contributor's names may not */
28 /* be used to endorse or promote products derived from this software without */
29 /* specific prior written permission of the institution or contributor. */
30 /******************************************************************************/
31 
32 #include "Xrd/XrdJob.hh"
34 #include "XrdSsi/XrdSsiAtomics.hh"
35 
37 {
38 public:
39 
41 
43 
44 virtual void DoIt();
45 
46 virtual void HandleResponse(XrdCl::XRootDStatus *status,
47  XrdCl::AnyObject *response)
48  {myCaller = pthread_self();
49  AddEvent(status, response);
50  }
51 
52 virtual bool XeqEvent(XrdCl::XRootDStatus *st, XrdCl::AnyObject **resp) = 0;
53 
54  XrdSsiEvent(const char *hName="") : XrdJob(hName), lastEvent(0),
55  running(false)
56  {}
57 
59 
60 protected:
61 pthread_t myCaller;
62 
63 private:
64 struct EventData
68 
69  void Move2(EventData &dest) {dest.status = status; status = 0;
70  dest.response = response; response = 0;
71  dest.next = next; next = 0;
72  }
73 
75  : status(st), response(resp), next(0) {}
77  };
78 
79 void ClrEvent(EventData *fdP);
80 
84 bool running;
85 static
87 };
88 #endif
void Move2(EventData &dest)
Definition: XrdSsiEvent.hh:69
void Lock()
Definition: XrdSsiAtomics.hh:116
Definition: XrdSsiAtomics.hh:110
Definition: XrdClAnyObject.hh:32
XrdSsiEvent(const char *hName="")
Definition: XrdSsiEvent.hh:54
XrdCl::AnyObject * response
Definition: XrdSsiEvent.hh:66
pthread_t myCaller
Definition: XrdSsiEvent.hh:61
EventData thisEvent
Definition: XrdSsiEvent.hh:82
virtual void HandleResponse(XrdCl::XRootDStatus *status, XrdCl::AnyObject *response)
Definition: XrdSsiEvent.hh:46
bool running
Definition: XrdSsiEvent.hh:84
XrdCl::XRootDStatus * status
Definition: XrdSsiEvent.hh:65
void AddEvent(XrdCl::XRootDStatus *st, XrdCl::AnyObject *resp)
static EventData * freeEvent
Definition: XrdSsiEvent.hh:86
Request status.
Definition: XrdClXRootDResponses.hh:212
virtual bool XeqEvent(XrdCl::XRootDStatus *st, XrdCl::AnyObject **resp)=0
Definition: XrdSsiEvent.hh:64
Definition: XrdSsiEvent.hh:36
~XrdSsiEvent()
Definition: XrdSsiEvent.hh:58
EventData * lastEvent
Definition: XrdSsiEvent.hh:83
EventData(XrdCl::XRootDStatus *st=0, XrdCl::AnyObject *resp=0)
Definition: XrdSsiEvent.hh:74
virtual void DoIt()
Handle an async response.
Definition: XrdClXRootDResponses.hh:839
XrdSsiMutex evMutex
Definition: XrdSsiEvent.hh:81
EventData * next
Definition: XrdSsiEvent.hh:67
void ClrEvent()
Definition: XrdSsiEvent.hh:42
void UnLock()
Definition: XrdSsiAtomics.hh:118
Definition: XrdJob.hh:42
~EventData()
Definition: XrdSsiEvent.hh:76