Ack Thanks Lennart
> -----Original Message----- > From: [email protected] [mailto:[email protected]] > Sent: den 14 oktober 2015 11:27 > To: Lennart Lund; Minh Chau H > Cc: [email protected] > Subject: [PATCH 0 of 2] Review Request for ntfa: fix deadlock situation due to > saNtfFinalize V2 [#1521]. > > Summary: ntfa: fix deadlock situation due to saNtfFinalize V2[#1521] > Review request for Trac Ticket(s): <<IF ANY LIST THE #>> > Peer Reviewer(s): <<LIST THE TECH REVIEWER(S) / MAINTAINER(S) HERE>> > Pull request to: <<LIST THE PERSON WITH PUSH ACCESS HERE>> > Affected branch(es): <<LIST ALL AFFECTED BRANCH(ES)>> > Development branch: <<IF ANY GIVE THE REPO URL>> > > -------------------------------- > Impacted area Impact y/n > -------------------------------- > Docs n > Build system n > RPM/packaging n > Configuration files n > Startup scripts n > SAF services n > OpenSAF services n > Core libraries n > Samples n > Tests n > Other n > > > Comments (indicate scope for each "y" above): > --------------------------------------------- > Incorporating some comments given by Lennart. > In this version2: > -comment is added in function header of saNtfFinalize(). > -two test cases is added for saNtfFinalize(). > > changeset ae56e045cad15d995a4531b120e1564be3142084 > Author: [email protected] > Date: Wed, 14 Oct 2015 14:48:22 +0530 > > ntfa: fix deadlock situation due to saNtfFinalize [#1521]. > > Generally any API called after finalize returns with > BAD_HANDLE. But in a > multi-threaded application, deadlock situation may arise > between > saNtfFinalize() with saNtfNotificationUnsubscribe(), or with > saNtfStateChangeNotificationAllocate(), or with and > saNtfPtrValAllocate(). > > After getting successful response from the server, > saNtfFinalize() takes > lock on ntfa_cb.cb_lock and tries to free all the handles and > resources. > Here it gets block in ntfa_hdl_rec_del() > ---->ncshm_destroy_hdl() (actually in in > ncshm_destroy_hdl()--->hm_block_me())) as client_handle is > in use by other > threads and waits for it to get released. At the same time, one > of the above > three APIS may be waiting for taking the lock on > ntfa_cb.cb_lock which is > not avialable as it is taken by saNtfFinalize(). > > From the solution perspective, the LEAP API where > santfFinalize() gets > blocked wants other threads to complete thier functionality > and release the > handle. In this situation, new API calls will return with > BAD_HANDLE (LEAP > functionality take_handle() fails) and existing API calls which > has already > taken the client_handle will be able to give back client_handle > (LEAP > functionality give_handle()). So if the lock is removed from > Finalize(), > other APIS will be able to complete their call and will return > handle one by > one which eventually will unblock saNtfFinalize(). > > changeset 292811a7c5b5d4972618aa3dc1a4388fc3b3bd6a > Author: [email protected] > Date: Wed, 14 Oct 2015 14:48:44 +0530 > > tests/ntf: add test cases for saNtfFinalize [#1521]. > > First test (saNtfFinalize_04) will subscribe with NTF after > successful > initialization. After this it will try to unsubscribe for notification > in a > separate thread while main thread will try to finalize with NTF. > Here > saNtfSubacribe() may get successful or return with > BAD_HANDLE. > > Second test (saNtfFinalize_05) will initialize with notification > service. > After successful initialization, it will try to allocate state change > notification in a separate thread while main thread will try to > finalize > with NTF. Here saNtfStateChangeNotificationAllocate() may > get successful or > return with BAD_HANDLE > > In both the test cases saNtfFinalize() will always be sucessful. > > > Complete diffstat: > ------------------ > osaf/libs/agents/saf/ntfa/ntfa_api.c | 7 +++- > tests/ntfsv/tet_saNtfFinalize.c | 106 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > +++++++++++ > 2 files changed, 111 insertions(+), 2 deletions(-) > > > Testing Commands: > ----------------- > Executed added test cases 2000 times. > > Testing, Expected Results: > -------------------------- > Not observing any deadlock. > > Conditions of Submission: > ------------------------- > Ack from any reviewer before RC1 of 4.7. > > Arch Built Started Linux distro > ------------------------------------------- > mips n n > mips64 n n > x86 n n > x86_64 y y > 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. ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
