Bonjour,
J'ai une segfault dans la liste d'initialisation du constructeur d'une classe sur un sf::Mutex.
Mon header :
#ifndef GAMEWINDOW_H
#define GAMEWINDOW_H
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include <memory>
class GameWindow
{
public:
GameWindow(sf::RenderWindow &renderWindow, TcpClient &tcpClient);
bool show();
void setGameMap(const std::shared_ptr<const GameMap> &gameMap);
private:
sf::RenderWindow &m_renderWindow;
TcpClient &m_tcpClient;
GameClient m_gameClient;
std::shared_ptr<const GameMap> m_gameMap;
sf::Mutex m_gameMapMutex;
};
#endif // GAMEWINDOW_H
Fichier source :
GameWindow::GameWindow(sf::RenderWindow &renderWindow, TcpClient &tcpClient) :
m_renderWindow(renderWindow),
m_tcpClient(tcpClient),
m_gameClient(tcpClient, this),
m_gameMap(NULL),
m_gameMapMutex()
{
}
La segfault arrive après avoir exécuté la ligne m_gameMapMutex().
- Il n'y a pas de segfault lorsque je remplace le sf::Mutex par un std::mutex
- La segfault disparaît lorsque je place le sf::Mutex avant les 4 autres variables membre
Informations supplémentaires :
Je compile avec MinGW 4.8.0 rev 2, système de gestion d'exceptions DWARF-2. Option -std=c++11 activée.
Call stack :
0 __gnu_cxx::__exchange_and_add atomicity.h 47 0x401653
1 __gnu_cxx::__exchange_and_add_dispatch atomicity.h 80 0x4016a3
2 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release shared_ptr_base.h 141 0x43307f
3 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator= shared_ptr_base.h 572 0x432120
4 std::__shared_ptr<GameMap const, (__gnu_cxx::_Lock_policy)2>::operator= shared_ptr_base.h 757 0x4305f9
5 std::shared_ptr<GameMap const>::operator= shared_ptr.h 93 0x42d461
6 GameWindow::setGameMap GameWindow.cpp 65 0x407a0a
7 GameClient::GameClient GameClient.cpp 17 0x401c30
8 GameWindow::GameWindow GameWindow.cpp 10 0x4076a7
9 main main.cpp 46 0x401916
Qu'en pensez-vous ? C'est un bug de SFML ou bien une horreur de ma part
?