Skip to content

[API-1358] Make sure that the logger static lock mutex is not destroyed before any global client instance#977

Merged
ihsandemir merged 4 commits intohazelcast:masterfrom
ihsandemir:logger_mutex_lifecycle_fix
Jun 20, 2022
Merged

[API-1358] Make sure that the logger static lock mutex is not destroyed before any global client instance#977
ihsandemir merged 4 commits intohazelcast:masterfrom
ihsandemir:logger_mutex_lifecycle_fix

Conversation

@ihsandemir
Copy link
Copy Markdown
Collaborator

Changed the logger lock mutex so that we can control its destruction order properly. We do not want it destroyed before the client is destructed. We need to control the order. static initialization and destruction order is not controllable if it is not a member of the logger class. It can be destroyed before the any global client instance is destroyed since global variables are also in static duration (https://www.learncpp.com/cpp-tutorial/introduction-to-global-variables).

See the related issue for a reproducer of the problem. Unfortunately, I could not write a unit test for it since i needed global variable and static variable destruction which would require a separate test binary. Hence, i tests manually using the test code in the issue.

fixes #976

…order properly. We do not want it destroyed before the client is destructed. We need to control the order. static initialization and destruction order is not controllable if it is not a member of the logger class. It can be destroyed before the any global client istance is destroyed since global variables are also in static duration (https://www.learncpp.com/cpp-tutorial/introduction-to-global-variables).
@ihsandemir ihsandemir added this to the 5.2.0 milestone Jun 1, 2022
@ihsandemir ihsandemir requested review from srknzl and yuce June 1, 2022 11:05
@ihsandemir ihsandemir self-assigned this Jun 1, 2022
@devOpsHazelcast
Copy link
Copy Markdown
Contributor

Windows test FAILed.

@devOpsHazelcast
Copy link
Copy Markdown
Contributor

Linux test FAILed.

@devOpsHazelcast
Copy link
Copy Markdown
Contributor

Linux test FAILed.

@devOpsHazelcast
Copy link
Copy Markdown
Contributor

Windows test FAILed.

@ihsandemir
Copy link
Copy Markdown
Collaborator Author

verify-linux

@devOpsHazelcast
Copy link
Copy Markdown
Contributor

Linux test FAILed.

@devOpsHazelcast
Copy link
Copy Markdown
Contributor

Linux test FAILed.

@devOpsHazelcast
Copy link
Copy Markdown
Contributor

Windows test PASSed.

@devOpsHazelcast
Copy link
Copy Markdown
Contributor

Linux test PASSed.

@devOpsHazelcast
Copy link
Copy Markdown
Contributor

Windows test PASSed.

@srknzl
Copy link
Copy Markdown

srknzl commented Jun 16, 2022

I did not quite understand what we are doing. Is the cout_lock global variable now instead of a static variable? If so, how does it help?

@ihsandemir ihsandemir merged commit 7a5321b into hazelcast:master Jun 20, 2022
@ihsandemir ihsandemir deleted the logger_mutex_lifecycle_fix branch June 20, 2022 07:36
@ihsandemir ihsandemir changed the title Make sure that the logger static lock mutex is not destroyed before any global client instance [API-1358] Make sure that the logger static lock mutex is not destroyed before any global client instance Jun 20, 2022
@devOpsHazelcast
Copy link
Copy Markdown
Contributor

Windows test PASSed.

@devOpsHazelcast
Copy link
Copy Markdown
Contributor

Linux test PASSed.

ihsandemir added a commit to ihsandemir/hazelcast-cpp-client that referenced this pull request Jun 20, 2022
…ny global client instance (hazelcast#977)

* Changed the logger lock mutex so that we can control its destruction order properly. We do not want it destroyed before the client is destructed. We need to control the order. static initialization and destruction order is not controllable if it is not a member of the logger class. It can be destroyed before the any global client istance is destroyed since global variables are also in static duration (https://www.learncpp.com/cpp-tutorial/introduction-to-global-variables).
ihsandemir added a commit to ihsandemir/hazelcast-cpp-client that referenced this pull request Jun 20, 2022
…ny global client instance (hazelcast#977)

* Changed the logger lock mutex so that we can control its destruction order properly. We do not want it destroyed before the client is destructed. We need to control the order. static initialization and destruction order is not controllable if it is not a member of the logger class. It can be destroyed before the any global client istance is destroyed since global variables are also in static duration (https://www.learncpp.com/cpp-tutorial/introduction-to-global-variables).
ihsandemir added a commit to ihsandemir/hazelcast-cpp-client that referenced this pull request Jun 20, 2022
…ny global client instance (hazelcast#977)

* Changed the logger lock mutex so that we can control its destruction order properly. We do not want it destroyed before the client is destructed. We need to control the order. static initialization and destruction order is not controllable if it is not a member of the logger class. It can be destroyed before the any global client istance is destroyed since global variables are also in static duration (https://www.learncpp.com/cpp-tutorial/introduction-to-global-variables).
ihsandemir added a commit to ihsandemir/hazelcast-cpp-client that referenced this pull request Jun 20, 2022
…ny global client instance (hazelcast#977)

* Changed the logger lock mutex so that we can control its destruction order properly. We do not want it destroyed before the client is destructed. We need to control the order. static initialization and destruction order is not controllable if it is not a member of the logger class. It can be destroyed before the any global client istance is destroyed since global variables are also in static duration (https://www.learncpp.com/cpp-tutorial/introduction-to-global-variables).
ihsandemir added a commit that referenced this pull request Jun 20, 2022
…ny global client instance (#977) (#992)

* Changed the logger lock mutex so that we can control its destruction order properly. We do not want it destroyed before the client is destructed. We need to control the order. static initialization and destruction order is not controllable if it is not a member of the logger class. It can be destroyed before the any global client istance is destroyed since global variables are also in static duration (https://www.learncpp.com/cpp-tutorial/introduction-to-global-variables).
ihsandemir added a commit that referenced this pull request Jun 20, 2022
…ny global client instance (#977) (#991)

* Changed the logger lock mutex so that we can control its destruction order properly. We do not want it destroyed before the client is destructed. We need to control the order. static initialization and destruction order is not controllable if it is not a member of the logger class. It can be destroyed before the any global client istance is destroyed since global variables are also in static duration (https://www.learncpp.com/cpp-tutorial/introduction-to-global-variables).
ihsandemir added a commit that referenced this pull request Jun 21, 2022
…ny global client instance (#977) (#994)

* Changed the logger lock mutex so that we can control its destruction order properly. We do not want it destroyed before the client is destructed. We need to control the order. static initialization and destruction order is not controllable if it is not a member of the logger class. It can be destroyed before the any global client istance is destroyed since global variables are also in static duration (https://www.learncpp.com/cpp-tutorial/introduction-to-global-variables).
ihsandemir added a commit that referenced this pull request Jun 21, 2022
…ny global client instance (#977) (#993)

* Changed the logger lock mutex so that we can control its destruction order properly. We do not want it destroyed before the client is destructed. We need to control the order. static initialization and destruction order is not controllable if it is not a member of the logger class. It can be destroyed before the any global client istance is destroyed since global variables are also in static duration (https://www.learncpp.com/cpp-tutorial/introduction-to-global-variables).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The static lock used in logger may be destructed before the client is destroyed which may cause [API-1358]

4 participants