1

Intel Inspector reports internal memory leak from even the simplest std::mutex examples:

// std_mutex_test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include "TestMutex.h"

int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << "Starting\n";
    CTestMutex testMutex;

    for (int i = 0; i < 10; i++)
        testMutex.DoStuff();

    std::cout << "Done\nPress a key...\n";
    getchar();
    return 0;
}

// TestMutex.h : Class for testing mutex
//
#include "stdafx.h"
#include "TestMutex.h"

class CTestMutex
{
private:
    std::mutex mtx1;
    long sharedStuff;  // Example is just for testing the mutex, otherwise I would use atomic here
public:
    CTestMutex() { sharedStuff = 0; }
    ~CTestMutex();

    void CTestMutex::DoStuff()
    {
        mtx1.lock();
        sharedStuff++;
        mtx1.unlock();
    }

};

Intel Inspector XE 2013 report is as follows:

ID      Type    Sources Modules Object Size State
P1      Kernel resource leak    schedulerbase.cpp   std_mutex_test.exe      New
P2      Memory leak cachelocalschedulegroup.h   std_mutex_test.exe  304 New
P3      Memory leak collections.h   std_mutex_test.exe  7168    New
P4      Memory leak collections.h   std_mutex_test.exe  84  New
P5      Memory leak collections.h   std_mutex_test.exe  14336   New
P6      Memory leak collections.h   std_mutex_test.exe  4   New
P7      Memory leak collections.h   std_mutex_test.exe  56  New
P8      Memory leak collections.h   std_mutex_test.exe  12  New
P9      Memory leak collections.h   std_mutex_test.exe  96  New
P10     Memory leak collections.h   std_mutex_test.exe  49192   New
P11     Memory leak collections.h   std_mutex_test.exe  288 New
P12     Memory leak contextbase.h   std_mutex_test.exe  16  New
P13     Memory leak externalcontextbase.cpp std_mutex_test.exe  28  New
P14     Memory leak mailbox.h   std_mutex_test.exe  44  New
P15     Memory leak mailbox.h   std_mutex_test.exe  256 New
P16     Memory leak resourcemanager.cpp std_mutex_test.exe  12  New
P17     Memory leak resourcemanager.cpp std_mutex_test.exe  44  New
P18     Memory leak resourcemanager.cpp std_mutex_test.exe  52  New
P19     Memory leak resourcemanager.cpp std_mutex_test.exe  416 New
P20     Memory leak resourcemanager.cpp std_mutex_test.exe  208 New
P21     Memory leak resourcemanager.cpp std_mutex_test.exe  144 New
P22     Memory leak resourcemanager.cpp std_mutex_test.exe  64  New
P23     Memory leak rminternal.h    std_mutex_test.exe  64  New
P24     Memory leak rminternal.h    std_mutex_test.exe  8   New
P25     Memory leak rminternal.h    std_mutex_test.exe  292 New
P26     Memory leak schedulerbase.cpp   std_mutex_test.exe  176 New
P27     Memory leak schedulerbase.cpp   std_mutex_test.exe  56  New
P28     Memory leak schedulerbase.cpp   std_mutex_test.exe  20  New
P29     Memory leak schedulerbase.cpp   std_mutex_test.exe  4   New
P30     Memory leak schedulerbase.cpp   std_mutex_test.exe  4   New
P31     Memory leak schedulerbase.cpp   std_mutex_test.exe  192 New
P32     Memory leak schedulerbase.cpp   std_mutex_test.exe  136 New
P33     Memory leak schedulerbase.cpp   std_mutex_test.exe  1024    New
P34     Memory leak schedulerpolicybase.cpp std_mutex_test.exe  40  New
P35     Memory leak schedulerproxy.cpp  std_mutex_test.exe  2104    New
P36     Memory leak schedulerproxy.cpp  std_mutex_test.exe  4   New
P37     Memory leak schedulerproxy.cpp  std_mutex_test.exe  704 New
P38     Memory leak structuredworkstealingqueue.h   std_mutex_test.exe  2048    New
P39     Memory leak structuredworkstealingqueue.h   std_mutex_test.exe  4096    New
P40     Memory leak threadscheduler.cpp std_mutex_test.exe  520 New
P41     Memory leak threadscheduler.cpp std_mutex_test.exe  1664    New
P42     Memory not deallocated  trace.cpp   std_mutex_test.exe  24  New

Is there something I'm doing wrong here, or are these known kernel internal memory leaks that I have no control over?

Compiled the example using the Intel C++ compiler using the multi-threaded debug /MTd flag, running Visual Studio 2012 Update 3 on Windows 7 with all the latest updates.

std::lock_guard also leaks memory:

void CTestMutex::DoStuff()
{
    std::lock_guard<std::mutex> lock(mtx1);
    sharedStuff++;
}

Intel Inspector XE 2013 std::lock_guard report:

ID      Type    Sources Modules Object Size State
P1      Kernel resource leak    schedulerbase.cpp   std_mutex_test.exe      Not fixed
P2      Memory leak cachelocalschedulegroup.h   std_mutex_test.exe  304 Not fixed
P3      Memory leak collections.h   std_mutex_test.exe  7168    Not fixed
P4      Memory leak collections.h   std_mutex_test.exe  84  Not fixed
P5      Memory leak collections.h   std_mutex_test.exe  14336   Not fixed
P6      Memory leak collections.h   std_mutex_test.exe  4   Not fixed
P7      Memory leak collections.h   std_mutex_test.exe  56  Not fixed
P8      Memory leak collections.h   std_mutex_test.exe  12  Not fixed
P9      Memory leak collections.h   std_mutex_test.exe  96  Not fixed
P10     Memory leak collections.h   std_mutex_test.exe  49192   Not fixed
P11     Memory leak collections.h   std_mutex_test.exe  288 Not fixed
P12     Memory leak contextbase.h   std_mutex_test.exe  16  Not fixed
P13     Memory leak externalcontextbase.cpp std_mutex_test.exe  28  Not fixed
P14     Memory leak mailbox.h   std_mutex_test.exe  44  Not fixed
P15     Memory leak mailbox.h   std_mutex_test.exe  256 Not fixed
P16     Memory leak resourcemanager.cpp std_mutex_test.exe  12  Not fixed
P17     Memory leak resourcemanager.cpp std_mutex_test.exe  44  Not fixed
P18     Memory leak resourcemanager.cpp std_mutex_test.exe  52  Not fixed
P19     Memory leak resourcemanager.cpp std_mutex_test.exe  416 Not fixed
P20     Memory leak resourcemanager.cpp std_mutex_test.exe  208 Not fixed
P21     Memory leak resourcemanager.cpp std_mutex_test.exe  144 Not fixed
P22     Memory leak resourcemanager.cpp std_mutex_test.exe  64  Not fixed
P23     Memory leak rminternal.h    std_mutex_test.exe  64  Not fixed
P24     Memory leak rminternal.h    std_mutex_test.exe  8   Not fixed
P25     Memory leak rminternal.h    std_mutex_test.exe  292 Not fixed
P26     Memory leak schedulerbase.cpp   std_mutex_test.exe  176 Not fixed
P27     Memory leak schedulerbase.cpp   std_mutex_test.exe  56  Not fixed
P28     Memory leak schedulerbase.cpp   std_mutex_test.exe  20  Not fixed
P29     Memory leak schedulerbase.cpp   std_mutex_test.exe  4   Not fixed
P30     Memory leak schedulerbase.cpp   std_mutex_test.exe  4   Not fixed
P31     Memory leak schedulerbase.cpp   std_mutex_test.exe  192 Not fixed
P32     Memory leak schedulerbase.cpp   std_mutex_test.exe  136 Not fixed
P33     Memory leak schedulerbase.cpp   std_mutex_test.exe  1024    Not fixed
P34     Memory leak schedulerpolicybase.cpp std_mutex_test.exe  40  Not fixed
P35     Memory leak schedulerproxy.cpp  std_mutex_test.exe  2104    Not fixed
P36     Memory leak schedulerproxy.cpp  std_mutex_test.exe  4   Not fixed
P37     Memory leak schedulerproxy.cpp  std_mutex_test.exe  704 Not fixed
P38     Memory leak structuredworkstealingqueue.h   std_mutex_test.exe  2048    Not fixed
P39     Memory leak structuredworkstealingqueue.h   std_mutex_test.exe  4096    Not fixed
P40     Memory leak threadscheduler.cpp std_mutex_test.exe  520 Not fixed
P41     Memory leak threadscheduler.cpp std_mutex_test.exe  1664    Not fixed
P42     Memory not deallocated  trace.cpp   std_mutex_test.exe  24  Not fixed
Massimiliano
  • 16,770
  • 10
  • 69
  • 112
  • 3
    I think this is a "feature" of the VC++ `std::mutex` implementation, http://connect.microsoft.com/VisualStudio/feedback/details/757212 – Jonathan Wakely Jul 21 '13 at 18:03
  • @JonathanWakely The reply from Microsoft was in December 2012, I guess that the next release of the Microsoft C++ Standard Library implementation is not made available for Visual Studio 2012 users and means we must upgrade to Visual Studio 2013? Could perhaps someone with Visual Studio 2013 confirm that the std::mutex internal memory leaks have been fixed in the new version? –  Jul 21 '13 at 18:10
  • 1
    Yes, VS2013 has [fixes for this](http://blogs.msdn.com/b/vcblog/archive/2013/06/28/c-11-14-stl-features-fixes-and-breaking-changes-in-vs-2013.aspx). Fairly doubtful that it is going to make an Intel tool stop complaining btw. – Hans Passant Jul 21 '13 at 18:20
  • @HansPassant I've installed VS 2013 now, but unfortunately Intel Inspector XE 2013 does not support the IDE can't do any new test yet. –  Aug 10 '13 at 13:38
  • It is very unclear what you expect me to do about that. Bide your time or call your friendly Intel customer support agent. – Hans Passant Aug 10 '13 at 13:46
  • @HansPassant Oh, that reply didn't call for any action from your side, just wanted to inform. Thanks. –  Aug 10 '13 at 13:56

0 Answers0