Re: [devel] [PATCH 0 of 1] Review Request for smf: For a step, allow all unit types in the unit list [#2125]

2016-12-15 Thread Rafael Odzakow
ACK no comments


On 12/09/2016 11:58 AM, Lennart Lund wrote:
> Summary: smf: For a step, allow all unit types in the unit list
> Review request for Trac Ticket(s): #2125
> Peer Reviewer(s): rafael.odza...@ericsson.com, reddy.neelaka...@oracle.com
> Pull request to:
> Affected branch(es): 5.1, default
> Development branch: <>
>
> 
> Impacted area   Impact y/n
> 
>   Docsn
>   Build systemn
>   RPM/packaging   n
>   Configuration files n
>   Startup scripts n
>   SAF servicesy
>   OpenSAF servicesn
>   Core libraries  n
>   Samples n
>   Tests   n
>   Other   n
>
>
> Comments (indicate scope for each "y" above):
> -
>   <>
>
> changeset 50fa6ce8427607ed651de08d63db64f02a4d82d0
> Author:   Lennart Lund 
> Date: Thu, 08 Dec 2016 14:06:36 +0100
>
>   smf: For a step, allow all unit types in the unit list [#2125]
>
>   Make the SmfAdminOperation class able to handle an all unit list that
>   contains a mix of all types of units e.i SU, Node and Component. Ignore 
> unit
>   types that are not compatible with the requested operation
>
>
> Complete diffstat:
> --
>   osaf/services/saf/smfsv/smfd/SmfUpgradeStep.cc |  23 ++-
>   1 files changed, 18 insertions(+), 5 deletions(-)
>
>
> Testing Commands:
> -
> Run legacy tests
>
>
> Testing, Expected Results:
> --
>   <>
>
>
> Conditions of Submission:
> -
> One week or ACK from reviewers
>
>
> Arch  Built StartedLinux distro
> ---
> mipsn  n
> mips64  n  n
> x86 n  n
> x86_64  n  n
> powerpc n  n
> powerpc64   n  n
>
>
> Reviewer Checklist:
> ---
> [Submitters: make sure that your review doesn't trigger any checkmarks!]
>
>
> Your checkin has not passed review because (see checked entries):
>
> ___ Your RR template is generally incomplete; it has too many blank entries
>  that need proper data filled in.
>
> ___ You have failed to nominate the proper persons for review and push.
>
> ___ Your patches do not have proper short+long header
>
> ___ You have grammar/spelling in your header that is unacceptable.
>
> ___ You have exceeded a sensible line length in your headers/comments/text.
>
> ___ You have failed to put in a proper Trac Ticket # into your commits.
>
> ___ You have incorrectly put/left internal data in your comments/files
>  (i.e. internal bug tracking tool IDs, product names etc)
>
> ___ You have not given any evidence of testing beyond basic build tests.
>  Demonstrate some level of runtime or other sanity testing.
>
> ___ You have ^M present in some of your files. These have to be removed.
>
> ___ You have needlessly changed whitespace or added whitespace crimes
>  like trailing spaces, or spaces before tabs.
>
> ___ You have mixed real technical changes with whitespace and other
>  cosmetic code cleanup changes. These have to be separate commits.
>
> ___ You need to refactor your submission into logical chunks; there is
>  too much content into a single commit.
>
> ___ You have extraneous garbage in your review (merge commits etc)
>
> ___ You have giant attachments which should never have been sent;
>  Instead you should place your content in a public tree to be pulled.
>
> ___ You have too many commits attached to an e-mail; resend as threaded
>  commits, or place in a public tree for a pull.
>
> ___ You have resent this content multiple times without a clear indication
>  of what has changed between each re-send.
>
> ___ You have failed to adequately and individually address all of the
>  comments and change requests that were proposed in the initial review.
>
> ___ You have a misconfigured ~/.hgrc file (i.e. username, email etc)
>
> ___ Your computer have a badly configured date and time; confusing the
>  the threaded patch review.
>
> ___ Your changes affect IPC mechanism, and you don't present any results
>  for in-service upgradability test.
>
> ___ Your changes affect user manual and documentation, your patch series
>  do not contain the patch that updates the Doxygen manual.
>


--
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
___
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel


Re: [devel] [PATCH 1 of 1] NTFD: Increment iterator in NotificationMap loop before deleted [#2223]

2016-12-15 Thread Vu Minh Nguyen
Ack. Code review only.

Regards, Vu

> -Original Message-
> From: minh chau [mailto:minh.c...@dektech.com.au]
> Sent: Friday, December 16, 2016 8:52 AM
> To: praveen malviya ;
> vu.m.ngu...@dektech.com.au
> Cc: opensaf-devel@lists.sourceforge.net
> Subject: Re: [PATCH 1 of 1] NTFD: Increment iterator in NotificationMap
> loop before deleted [#2223]
> 
> Hi Praveen,
> 
> I have updated the steps, basically it's same as #2219.
> 
> @Vu: Any comments?
> 
> Thanks,
> Minh
> 
> On 15/12/16 21:46, praveen malviya wrote:
> > Ack, code review only.
> >
> > Please update the ticket if some easily reproducible steps are there.
> >
> > Thanks,
> > Praveen
> >
> > On 13-Dec-16 6:01 AM, Minh Hon Chau wrote:
> >>  osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc |  7 ---
> >>  1 files changed, 4 insertions(+), 3 deletions(-)
> >>
> >>
> >> In NtfAdmin::checkNotificationList(), when
> >> deleteConfirmedNotification() deletes
> >> the last item, the NotificationMap is reduced, posNot++ will be out
> >> of range of
> >> NotificationMap since posNot is invalid.
> >>
> >> Patch uses posNot is main iterator, and deleteNot as temporary
> >> iterator points to
> >> deleted notification
> >>
> >> diff --git a/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
> >> b/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
> >> --- a/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
> >> +++ b/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
> >> @@ -646,9 +646,10 @@ void NtfAdmin::checkNotificationList() {
> >>TRACE_ENTER();
> >>NotificationMap::iterator posNot;
> >>for (posNot = notificationMap.begin();
> >> -   posNot != notificationMap.end();
> >> -   posNot++) {
> >> +   posNot != notificationMap.end();) {
> >>  NtfSmartPtr notification = posNot->second;
> >> +NotificationMap::iterator deleteNot = posNot++;
> >> +
> >>  if (notification->loggedOk() == false) {
> >>/* When reader API works check if already logged */
> >>logger.log(notification, true);
> >> @@ -668,7 +669,7 @@ void NtfAdmin::checkNotificationList() {
> >>TRACE_2("Client: %u not exist", uSubId.clientId);
> >>  }
> >>}
> >> -  deleteConfirmedNotification(notification, posNot);
> >> +  deleteConfirmedNotification(notification, deleteNot);
> >>  }
> >>}
> >>TRACE_LEAVE();
> >>
> >



--
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
___
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel


Re: [devel] [PATCH 1 of 1] NTFD: Increment iterator in NotificationMap loop before deleted [#2223]

2016-12-15 Thread minh chau
Hi Praveen,

I have updated the steps, basically it's same as #2219.

@Vu: Any comments?

Thanks,
Minh

On 15/12/16 21:46, praveen malviya wrote:
> Ack, code review only.
>
> Please update the ticket if some easily reproducible steps are there.
>
> Thanks,
> Praveen
>
> On 13-Dec-16 6:01 AM, Minh Hon Chau wrote:
>>  osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc |  7 ---
>>  1 files changed, 4 insertions(+), 3 deletions(-)
>>
>>
>> In NtfAdmin::checkNotificationList(), when 
>> deleteConfirmedNotification() deletes
>> the last item, the NotificationMap is reduced, posNot++ will be out 
>> of range of
>> NotificationMap since posNot is invalid.
>>
>> Patch uses posNot is main iterator, and deleteNot as temporary 
>> iterator points to
>> deleted notification
>>
>> diff --git a/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc 
>> b/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
>> --- a/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
>> +++ b/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
>> @@ -646,9 +646,10 @@ void NtfAdmin::checkNotificationList() {
>>TRACE_ENTER();
>>NotificationMap::iterator posNot;
>>for (posNot = notificationMap.begin();
>> -   posNot != notificationMap.end();
>> -   posNot++) {
>> +   posNot != notificationMap.end();) {
>>  NtfSmartPtr notification = posNot->second;
>> +NotificationMap::iterator deleteNot = posNot++;
>> +
>>  if (notification->loggedOk() == false) {
>>/* When reader API works check if already logged */
>>logger.log(notification, true);
>> @@ -668,7 +669,7 @@ void NtfAdmin::checkNotificationList() {
>>TRACE_2("Client: %u not exist", uSubId.clientId);
>>  }
>>}
>> -  deleteConfirmedNotification(notification, posNot);
>> +  deleteConfirmedNotification(notification, deleteNot);
>>  }
>>}
>>TRACE_LEAVE();
>>
>


--
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
___
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel


Re: [devel] [PATCH 1 of 1] amfnd: monitor immnd process using FIFO [#2158]

2016-12-15 Thread Hans Nordeback
Hi Praveen,

I'll review this ticket tomorrow, but one question in advance, what is 
the use case for this ticket?

Looking at the ticket description, the use case seems to be immnd 
crashes during the nid phase,

but that use case is handled by ticket #2204. Is there a "window" after 
amfnd has called "nid_notify" where

immnd is not monitored by amf?  /Thanks HansN


On 12/13/2016 11:48 AM, praveen.malv...@oracle.com wrote:
>   osaf/services/saf/amf/amfnd/clc.cc  |  11 +++
>   osaf/services/saf/amf/amfnd/comp.cc |  13 
>   osaf/services/saf/amf/amfnd/evt.cc  |   4 +
>   osaf/services/saf/amf/amfnd/include/avnd_cb.h   |   6 ++
>   osaf/services/saf/amf/amfnd/include/avnd_comp.h |   1 +
>   osaf/services/saf/amf/amfnd/include/avnd_evt.h  |   1 +
>   osaf/services/saf/amf/amfnd/include/avnd_proc.h |   1 +
>   osaf/services/saf/amf/amfnd/main.cc |  72 
> +++-
>   8 files changed, 105 insertions(+), 4 deletions(-)
>
>
> If IMMND dies before it becomes AMF component there is no entity to restart 
> it.
> With ticket #2204, NID will monitor using existing FIFO each of the started 
> process until it itself exits.
> This patch will also monitor IMMND using FIFO.
> If IMMND dies before becoming AMF component and after NID exit then with this 
> patch AMFND will
> reboot the node because AMFND does not have configuration to restart IMMND.
>
> diff --git a/osaf/services/saf/amf/amfnd/clc.cc 
> b/osaf/services/saf/amf/amfnd/clc.cc
> --- a/osaf/services/saf/amf/amfnd/clc.cc
> +++ b/osaf/services/saf/amf/amfnd/clc.cc
> @@ -909,6 +909,7 @@ uint32_t avnd_comp_clc_fsm_run(AVND_CB *
>   TRACE_LEAVE2("%u", rc);
>   return rc;
>   }
> +
>   
> /
> Name  : avnd_comp_clc_st_chng_prc
>
> @@ -1486,6 +1487,12 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_
>   (comp->su->pres == SA_AMF_PRESENCE_INSTANTIATED))
>   rc = avnd_compdb_rec_del(cb, comp->name);
>   
> + if ((final_st == SA_AMF_PRESENCE_INSTANTIATED) &&
> + (comp->is_comp_immnd() == true)) {
> + AVND_EVT *evt = avnd_evt_create(cb, AVND_EVT_IMMND_COMP_UP, 0, 
> 0, 0, 0, 0);
> + if (evt)
> + rc = avnd_evt_send(cb, evt);
> + }
>done:
>   TRACE_LEAVE2("%u", rc);
>   return rc;
> @@ -1553,6 +1560,10 @@ uint32_t avnd_comp_clc_uninst_inst_hdler
>   
>   /* transition to 'instantiating' state */
>   avnd_comp_pres_state_set(cb, comp, 
> SA_AMF_PRESENCE_INSTANTIATING);
> + if (comp->is_comp_immnd() == true) {
> +   TRACE("immnd is instantiating");
> +   avnd_cb->imm_comp_state = AMFND_IMM_COMP_INSTANTIATING;
> + }
>   }
>   
>   done:
> diff --git a/osaf/services/saf/amf/amfnd/comp.cc 
> b/osaf/services/saf/amf/amfnd/comp.cc
> --- a/osaf/services/saf/amf/amfnd/comp.cc
> +++ b/osaf/services/saf/amf/amfnd/comp.cc
> @@ -3016,3 +3016,16 @@ uint32_t avnd_amfa_mds_info_evh(AVND_CB
> return NCSCC_RC_SUCCESS;
>   }
>   
> +bool AVND_COMP::is_comp_immnd() const {
> +  if ((su->is_ncs == true) &&
> +(name.find("safSg=NoRed,safApp=OpenSAF") != std::string::npos) &&
> +(name.find("safComp=IMMND") != std::string::npos))
> +return true;
> +  return false;
> +}
> +
> +uint32_t avnd_immnd_comp_evh(AVND_CB *cb, AVND_EVT *evt) {
> + avnd_cb->imm_comp_state = AMFND_IMM_COMP_UP;
> + TRACE("IMMND is now AMF component");
> + return NCSCC_RC_SUCCESS;
> +}
> diff --git a/osaf/services/saf/amf/amfnd/evt.cc 
> b/osaf/services/saf/amf/amfnd/evt.cc
> --- a/osaf/services/saf/amf/amfnd/evt.cc
> +++ b/osaf/services/saf/amf/amfnd/evt.cc
> @@ -185,6 +185,8 @@ AVND_EVT *avnd_evt_create(AVND_CB *cb,
>   
>   case AVND_EVT_AMFA_MDS_VER_INFO:
>   break;
> + case AVND_EVT_IMMND_COMP_UP:
> + break;
>   default:
>   delete evt;
>   evt = nullptr;
> @@ -316,6 +318,8 @@ void avnd_evt_destroy(AVND_EVT *evt)
>   break;
>   case AVND_EVT_AMFA_MDS_VER_INFO:
>   break;
> + case AVND_EVT_IMMND_COMP_UP:
> + break;
>   
>   default:
>   LOG_NO("%s: unknown event type %u", __FUNCTION__, type);
> diff --git a/osaf/services/saf/amf/amfnd/include/avnd_cb.h 
> b/osaf/services/saf/amf/amfnd/include/avnd_cb.h
> --- a/osaf/services/saf/amf/amfnd/include/avnd_cb.h
> +++ b/osaf/services/saf/amf/amfnd/include/avnd_cb.h
> @@ -34,6 +34,11 @@
>   #define AVND_CB_H
>   #include 
>   
> +typedef enum {
> +AMFND_IMM_COMP_BASE = 1,
> +AMFND_IMM_COMP_INSTANTIATING = 2,
> +AMFND_IMM_COMP_UP = 3
> +} AMFND_IMM_COMP_STATUS;
>   
>   typedef struct avnd_cb_tag {
>   SYSF_MBX mbx;   /* mailbox on which AvND waits */
> @@ -121,6 +126,7 @@ typedef struct avnd_cb_tag {
>   SaTimeT 

Re: [devel] [PATCH 1 of 1] nid: Use the FIFO monitoring for started services V2 [#2204]

2016-12-15 Thread praveen malviya
Ack from me.

Note:For pushing in other branches there is dependency on FileNotify 
infrastructure developed in ticket #2091. Currently #2091 is not pushed 
in other branches.

Thanks,
Praveen

On 13-Dec-16 7:26 PM, Hans Nordeback wrote:
>  osaf/services/infrastructure/nid/Makefile.am |2 +-
>  osaf/services/infrastructure/nid/nodeinit.c  |  285 
> ++-
>  2 files changed, 278 insertions(+), 9 deletions(-)
>
>
> diff --git a/osaf/services/infrastructure/nid/Makefile.am 
> b/osaf/services/infrastructure/nid/Makefile.am
> --- a/osaf/services/infrastructure/nid/Makefile.am
> +++ b/osaf/services/infrastructure/nid/Makefile.am
> @@ -31,7 +31,7 @@ opensafd_CPPFLAGS = \
>   $(AM_CPPFLAGS)
>
>  opensafd_SOURCES = \
> - nodeinit.c
> + nodeinit.cc
>
>  opensafd_LDADD = \
>   $(top_builddir)/osaf/libs/core/libopensaf_core.la
> diff --git a/osaf/services/infrastructure/nid/nodeinit.c 
> b/osaf/services/infrastructure/nid/nodeinit.cc
> rename from osaf/services/infrastructure/nid/nodeinit.c
> rename to osaf/services/infrastructure/nid/nodeinit.cc
> --- a/osaf/services/infrastructure/nid/nodeinit.c
> +++ b/osaf/services/infrastructure/nid/nodeinit.cc
> @@ -63,10 +63,15 @@
>  #include 
>  #include 
>  #include 
> +
> +#include 
> +#include 
> +
>  #include "osaf_poll.h"
>  #include "osaf_time.h"
>
>  #include "nodeinit.h"
> +#include "osaf/libs/core/cplusplus/base/file_notify.h"
>
>  #define SETSIG(sa, sig, fun, flags) \
>   do { \
> @@ -111,11 +116,46 @@ static uint32_t recovery_action(NID_SPAW
>  static uint32_t spawn_services(char *);
>  static void nid_sleep(uint32_t);
>
> +/* Functions used for service monitoring */
> +static uint32_t create_svc_monitor_thread(void);
> +static void* svc_monitor_thread(void *fd);
> +static int handle_data_request(struct pollfd *fds, const std::string 
> _name);
> +static void handle_svc_exit(int fd);
> +static std::string get_svc_name(int fd);
> +static int start_monitor_svc(const char *svc);
> +
> +/* Data declarations for service monitoring */
> +static int svc_mon_fd = -1;
> +static int next_svc_fds_slot = 0;
> +
> +struct SvcMap {
> +  std::string nid_name;
> +  std::string fifo_file;
> +  int fifo_fd;
> +};
> +
> +static std::vector svc_map = {
> +  {"AMFD", "osafamfd.fifo", -1},
> +  {"TRANSPORT", "osaftransportd.fifo", -1},
> +  {"CLMNA", "osafclmna.fifo", -1},
> +  {"RDED", "osafrded.fifo", -1},
> +  {"HLFM", "osaffmd.fifo", -1},
> +  {"IMMD", "osafimmd.fifo", -1},
> +  {"IMMND", "osafimmnd.fifo", -1},
> +  {"LOGD", "osaflogd.fifo", -1},
> +  {"NTFD", "osafntfd.fifo", -1},
> +  {"PLMD", "osafplmd.fifo", -1},
> +  {"CLMD", "osafclmd.fifo", -1},
> +};
> +static const std::string fifo_dir = PKGLOCALSTATEDIR;
> +const int kMaxNumOfFds = 40;
> +const int kTenSecondsInMilliseconds = 1;
> +
>  /* List of recovery strategies */
>  NID_FUNC recovery_funcs[] = { spawn_wait  };
>  NID_FORK_FUNC fork_funcs[] = { fork_process, fork_script, fork_daemon };
>
> -char *nid_recerr[NID_MAXREC][4] = {
> +const char *nid_recerr[NID_MAXREC][4] = {
>   {"Trying To RESPAWN", "Could Not RESPAWN", "Succeeded To RESPAWN", 
> "FAILED TO RESPAWN"},
>   {"Trying To RESET", "Faild to RESET", "suceeded To RESET", "FAILED 
> AFTER RESTART"}
>  };
> @@ -167,10 +207,10 @@ char *gettoken(char **str, uint32_t tok)
>   return (NULL);
>   }
>
> - while ((*p != tok) && (*p != '\n') && *p)
> + while ((*p != static_cast(tok)) && (*p != '\n') && *p)
>   p++;
>
> - if ((*p == tok) || (*p == '\n')) {
> + if ((*p == static_cast(tok)) || (*p == '\n')) {
>   *p++ = 0;
>   *str = p;
>   }
> @@ -522,7 +562,7 @@ uint32_t parse_nodeinit_conf(char *strbu
>   NID_SPAWN_INFO *childinfo;
>   char buff[256], sbuf[200], *ch, *ch1, tmp[30], nidconf[256];
>   uint32_t lineno = 0, retry = 0;
> - struct nid_resetinfo info = { {""}, -1 };
> + struct nid_resetinfo info = { {""}, static_cast(-1) };
>   FILE *file, *ntfile;
>
>   TRACE_ENTER();
> @@ -565,7 +605,7 @@ uint32_t parse_nodeinit_conf(char *strbu
>   }
>
>   /* Allocate mem for new child info */
> - while ((childinfo = malloc(sizeof(NID_SPAWN_INFO))) == NULL) {
> + while ((childinfo = 
> reinterpret_cast(malloc(sizeof(NID_SPAWN_INFO == NULL) {
>   if (retry++ == 5) {
>   sprintf(strbuf, "FAILURE: Out of memory\n");
>   return NCSCC_RC_FAILURE;
> @@ -994,6 +1034,8 @@ uint32_t spawn_wait(NID_SPAWN_INFO *serv
>   break;
>   }
>
> + waitpid(pid, NULL, WNOHANG);
> +
>   /* Read the message from FIFO and fill in structure. */
>   while ((n = read(select_fd, buff1, sizeof(buff1))) <= 0) {
>   if (errno == EINTR) {
> @@ -1263,7 +1305,7 @@ uint32_t recovery_action(NID_SPAWN_INFO
>   if (service->recovery_matrix[opt].retry_count == 0) {
>

Re: [devel] [PATCH 1 of 1] NTFD: Increment iterator in NotificationMap loop before deleted [#2223]

2016-12-15 Thread praveen malviya
Ack, code review only.

Please update the ticket if some easily reproducible steps are there.

Thanks,
Praveen

On 13-Dec-16 6:01 AM, Minh Hon Chau wrote:
>  osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc |  7 ---
>  1 files changed, 4 insertions(+), 3 deletions(-)
>
>
> In NtfAdmin::checkNotificationList(), when deleteConfirmedNotification() 
> deletes
> the last item, the NotificationMap is reduced, posNot++ will be out of range 
> of
> NotificationMap since posNot is invalid.
>
> Patch uses posNot is main iterator, and deleteNot as temporary iterator 
> points to
> deleted notification
>
> diff --git a/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc 
> b/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
> --- a/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
> +++ b/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
> @@ -646,9 +646,10 @@ void NtfAdmin::checkNotificationList() {
>TRACE_ENTER();
>NotificationMap::iterator posNot;
>for (posNot = notificationMap.begin();
> -   posNot != notificationMap.end();
> -   posNot++) {
> +   posNot != notificationMap.end();) {
>  NtfSmartPtr notification = posNot->second;
> +NotificationMap::iterator deleteNot = posNot++;
> +
>  if (notification->loggedOk() == false) {
>/* When reader API works check if already logged */
>logger.log(notification, true);
> @@ -668,7 +669,7 @@ void NtfAdmin::checkNotificationList() {
>TRACE_2("Client: %u not exist", uSubId.clientId);
>  }
>}
> -  deleteConfirmedNotification(notification, posNot);
> +  deleteConfirmedNotification(notification, deleteNot);
>  }
>}
>TRACE_LEAVE();
>

--
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
___
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel