XRootD
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 
42  void ClrEvent() {evMutex.Lock();ClrEvent(&thisEvent);evMutex.UnLock();}
43 
44 virtual void DoIt();
45 
46 virtual void HandleResponse(XrdCl::XRootDStatus *status,
47  XrdCl::AnyObject *response)
48  {AddEvent(status, response);}
49 
50 virtual int XeqEvent(XrdCl::XRootDStatus *st, XrdCl::AnyObject **resp) = 0;
51 
52 virtual void XeqEvFin() = 0;
53 
54  XrdSsiEvent() : XrdJob(), lastEvent(nullptr),
55  running(false), isClear(true)
56  {
57  tident[0] = '\0';
58  Comment = tident;
59  }
60 
61  ~XrdSsiEvent() {if (!isClear) ClrEvent(&thisEvent);}
62 
63 protected:
64 
65 char tident[24]; //"c %u#%u" with %u max 10 digits
66 
67 private:
68 struct EventData
69  {XrdCl::XRootDStatus *status;
70  XrdCl::AnyObject *response;
71  EventData *next;
72 
73  void Move2(EventData &dest) {dest.status = status; status = 0;
74  dest.response = response; response = 0;
75  dest.next = next; next = 0;
76  }
77 
78  EventData(XrdCl::XRootDStatus *st=0, XrdCl::AnyObject *resp=0)
79  : status(st), response(resp), next(0) {}
80  ~EventData() {}
81  };
82 
83 void ClrEvent(EventData *fdP);
84 
85 XrdSsiMutex evMutex;
86 EventData thisEvent;
87 EventData *lastEvent;
88 bool running;
89 bool isClear;
90 static
91 EventData *freeEvent;
92 };
93 #endif
Handle an async response.
Definition: XrdJob.hh:43
const char * Comment
Definition: XrdJob.hh:47
virtual void DoIt()
Definition: XrdSsiEvent.cc:148
virtual void XeqEvFin()=0
void ClrEvent()
Definition: XrdSsiEvent.hh:42
void AddEvent(XrdCl::XRootDStatus *st, XrdCl::AnyObject *resp)
Definition: XrdSsiEvent.cc:56
virtual void HandleResponse(XrdCl::XRootDStatus *status, XrdCl::AnyObject *response)
Definition: XrdSsiEvent.hh:46
virtual int XeqEvent(XrdCl::XRootDStatus *st, XrdCl::AnyObject **resp)=0
char tident[24]
Definition: XrdSsiEvent.hh:65