Hi a.Vu,

>From coredump info (in attachment), There is no saLogWriteLogAsync/
saLogStreamClose() is called ??

Regards
Canh

-----Original Message-----
From: Vu Minh Nguyen <vu.m.ngu...@dektech.com.au> 
Sent: Friday, June 1, 2018 3:56 PM
To: lennart.l...@ericsson.com; canh.v.tru...@dektech.com.au
Cc: opensaf-devel@lists.sourceforge.net; Vu Minh Nguyen
<vu.m.ngu...@dektech.com.au>
Subject: [PATCH 1/1] log: restore ref counter for deleted stream [#2870]

In the methods LogAgent::saLogStreamClose() and
LogAgent::saLogWriteLogAsync(),
the client is deleted if failed to recover; however, the pointer to the log
stream of this client has not been reseted. Therefore, when the destrustor
of
ScopeData runs, the reference counter could be restored on deleted log
stream.

This patch resets the pointer to nullptr in such case.
---
 src/log/agent/lga_agent.cc | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/log/agent/lga_agent.cc b/src/log/agent/lga_agent.cc
index f33b5dc..93ab150 100644
--- a/src/log/agent/lga_agent.cc
+++ b/src/log/agent/lga_agent.cc
@@ -1267,6 +1267,8 @@ SaAisErrorT
LogAgent::saLogWriteLogAsync(SaLogStreamHandleT logStreamHandle,
     if (client->is_recovery_failed() == true) {
       ScopeLock critical_section(get_delete_obj_sync_mutex_);
       RemoveLogClient(&client);
+      // To avoid ScopeData restore ref counter for already deleted stream
+      stream = nullptr;
       ais_rc = SA_AIS_ERR_BAD_HANDLE;
       return ais_rc;
     }
@@ -1388,6 +1390,8 @@ SaAisErrorT
LogAgent::saLogStreamClose(SaLogStreamHandleT logStreamHandle) {
     if (client->is_recovery_failed() == true) {
       ScopeLock critical_section(get_delete_obj_sync_mutex_);
       RemoveLogClient(&client);
+      // To avoid ScopeData restore ref counter for already deleted stream
+      stream = nullptr;
       ais_rc = SA_AIS_ERR_BAD_HANDLE;
       return ais_rc;
     }
-- 
1.9.1

------------------------------------------------------------------------------

7f14f41e98c7: /lib64/libc.so.6:     file format elf64-x86-64


Disassembly of section .text:

00000000000348c7 <raise+0x37>:
__GI_raise():
   348c7:       48              cmp    $0xfffffffffffff000,%rax

------------------------------------------------------------------------------

7f14f41eac9a: /lib64/libc.so.6:     file format elf64-x86-64


Disassembly of section .text:

0000000000035c9a <abort+0x13a>:
__GI_abort():
   35c9a:       64              mov    %fs:0x10,%rdx
   35ca1:

------------------------------------------------------------------------------

7f0fbf6ffa41: /usr/lib64/libopensaf_core.so.0:     file format elf64-x86-64


Disassembly of section .text:

000000000001ca41 <osaf_abort+0x31>:
osaf_abort():
   1ca41:       66              nopw   %cs:0x0(%rax,%rax,1)
   1ca48:

------------------------------------------------------------------------------

7f0fbd78f73e: /usr/lib64/libSaLog.so.1:     file format elf64-x86-64


Disassembly of section .text:

000000000000d73e <RefCounter::RestoreRefCounter(char const*, 
RefCounter::Degree, bool)+0x1ae>:
_ZN10RefCounter17RestoreRefCounterEPKcNS_6DegreeEb():
/home/localjenkins/jenkins-slave-area/workspace/E2_Build_Cmw_x86_64-2/opensaf/src/log/agent/lga_ref_counter.cc:65
 (discriminator 1)
    d73e:       48              lea    0x209b(%rip),%rcx        # f7e0 
<RefCounter::RestoreRefCounter(char const*, RefCounter::Degree, 
bool)::__PRETTY_FUNCTION__>

------------------------------------------------------------------------------

7f0fbd78a4f0: /usr/lib64/libSaLog.so.1:     file format elf64-x86-64


Disassembly of section .text:

00000000000084f0 <ScopeData::~ScopeData()+0x50>:
_ZN9ScopeDataD2Ev():
/home/localjenkins/jenkins-slave-area/workspace/E2_Build_Cmw_x86_64-2/opensaf/src/log/agent/lga_agent.cc:121
    84f0:       48              mov    0x8(%rbx),%rax

------------------------------------------------------------------------------

7f0fbd78b9d8: /usr/lib64/libSaLog.so.1:     file format elf64-x86-64


Disassembly of section .text:

00000000000099d8 <LogAgent::saLogDispatch(unsigned long long, 
SaDispatchFlagsT)+0x128>:
_ZNKSs7_M_dataEv():
/usr/include/c++/4.8/bits/basic_string.h:293
    99d8:       48              mov    0xa8(%rsp),%rax
    99df:

------------------------------------------------------------------------------

8000d16d: 
//opt/lpmsv/codearchive/VDICOS.CXC1731623.LibraryCode.4.6.0.145.cba-vdicos-x86_64.sle12:
     file format elf64-x86-64


Disassembly of section .text:

000000000000d16d <vdicos::callbackPollerThread(void*)+0x3d>:
_ZN6vdicos20callbackPollerThreadEPv():
    d16d:       83                      cmp    $0x1,%eax

------------------------------------------------------------------------------

7f14f455e724: /lib64/libpthread.so.0:     file format elf64-x86-64


Disassembly of section .text:

0000000000008724 <start_thread+0xc4>:
start_thread():
    8724:       64              mov    %rax,%fs:0x630
    872b:

------------------------------------------------------------------------------

7f14f429ec9d: /lib64/libc.so.6:     file format elf64-x86-64


Disassembly of section .text:

00000000000e9c9d <__clone+0x6d>:
__clone():
   e9c9d:       48                      mov    %rax,%rdi

------------------------------------------------------------------------------

------------------------------------------------------------------------------
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

Reply via email to