diff --git a/etc/visual-studio/UnitTests.vcxproj b/etc/visual-studio/UnitTests.vcxproj
index b495f00ad..74b9f468f 100644
--- a/etc/visual-studio/UnitTests.vcxproj
+++ b/etc/visual-studio/UnitTests.vcxproj
@@ -49,6 +49,7 @@
%(PreprocessorDefinitions)
MBEDTLS_CONFIG_FILE="mbedtls-config.h";
OPENTHREAD_CONFIG_FILE="openthread-windows-config.h";
+ OPENTHREAD_MULTIPLE_INSTANCE;
Level3
true
diff --git a/etc/visual-studio/libopenthread-cli.vcxproj b/etc/visual-studio/libopenthread-cli.vcxproj
index 9171ca4e9..a64f92422 100644
--- a/etc/visual-studio/libopenthread-cli.vcxproj
+++ b/etc/visual-studio/libopenthread-cli.vcxproj
@@ -40,6 +40,7 @@
%(PreprocessorDefinitions);
MBEDTLS_CONFIG_FILE="mbedtls-config.h";
OPENTHREAD_CONFIG_FILE="openthread-windows-config.h";
+ OPENTHREAD_MULTIPLE_INSTANCE;
%(AdditionalIncludeDirectories);
diff --git a/etc/visual-studio/libopenthread-ncp-spi.vcxproj b/etc/visual-studio/libopenthread-ncp-spi.vcxproj
index 9009a4d42..3313d1cd2 100644
--- a/etc/visual-studio/libopenthread-ncp-spi.vcxproj
+++ b/etc/visual-studio/libopenthread-ncp-spi.vcxproj
@@ -40,6 +40,7 @@
%(PreprocessorDefinitions);
MBEDTLS_CONFIG_FILE="mbedtls-config.h";
OPENTHREAD_CONFIG_FILE="openthread-windows-config.h";
+ OPENTHREAD_MULTIPLE_INSTANCE;
%(AdditionalIncludeDirectories);
diff --git a/etc/visual-studio/libopenthread-ncp-uart.vcxproj b/etc/visual-studio/libopenthread-ncp-uart.vcxproj
index b5e3e0566..a5f9765a1 100644
--- a/etc/visual-studio/libopenthread-ncp-uart.vcxproj
+++ b/etc/visual-studio/libopenthread-ncp-uart.vcxproj
@@ -40,6 +40,7 @@
%(PreprocessorDefinitions);
MBEDTLS_CONFIG_FILE="mbedtls-config.h";
OPENTHREAD_CONFIG_FILE="openthread-windows-config.h";
+ OPENTHREAD_MULTIPLE_INSTANCE;
%(AdditionalIncludeDirectories);
diff --git a/etc/visual-studio/libopenthread.vcxproj b/etc/visual-studio/libopenthread.vcxproj
index e6745b3d1..38f7f4c01 100644
--- a/etc/visual-studio/libopenthread.vcxproj
+++ b/etc/visual-studio/libopenthread.vcxproj
@@ -40,6 +40,7 @@
%(PreprocessorDefinitions);
MBEDTLS_CONFIG_FILE="mbedtls-config.h";
OPENTHREAD_CONFIG_FILE="openthread-windows-config.h";
+ OPENTHREAD_MULTIPLE_INSTANCE;
%(AdditionalIncludeDirectories);
@@ -210,4 +211,4 @@
-
+
\ No newline at end of file
diff --git a/etc/visual-studio/libopenthread.vcxproj.filters b/etc/visual-studio/libopenthread.vcxproj.filters
index f7f5723c5..a73a75dff 100644
--- a/etc/visual-studio/libopenthread.vcxproj.filters
+++ b/etc/visual-studio/libopenthread.vcxproj.filters
@@ -174,9 +174,6 @@
Source Files\thread
-
- Source Files\thread
-
Source Files\thread
@@ -501,4 +498,4 @@
Header Files\common
-
+
\ No newline at end of file
diff --git a/etc/visual-studio/mbedtls.vcxproj b/etc/visual-studio/mbedtls.vcxproj
index 5f6f62e7e..a08835d07 100644
--- a/etc/visual-studio/mbedtls.vcxproj
+++ b/etc/visual-studio/mbedtls.vcxproj
@@ -1,6 +1,6 @@
-
+
{4111C8BB-D354-4348-AD3C-EB6832E84831}
Win32Proj
@@ -38,7 +38,8 @@
;%(PreprocessorDefinitions);
- MBEDTLS_CONFIG_FILE="mbedtls-config.h"
+ MBEDTLS_CONFIG_FILE="mbedtls-config.h";
+ OPENTHREAD_MULTIPLE_INSTANCE;
..\..\include;
diff --git a/etc/visual-studio/ot-cli.vcxproj b/etc/visual-studio/ot-cli.vcxproj
index 121890ab2..2c18ad24f 100644
--- a/etc/visual-studio/ot-cli.vcxproj
+++ b/etc/visual-studio/ot-cli.vcxproj
@@ -39,6 +39,7 @@
%(PreprocessorDefinitions);
OPENTHREAD_CONFIG_FILE="openthread-windows-config.h";
+ OPENTHREAD_MULTIPLE_INSTANCE;
%(AdditionalIncludeDirectories);
diff --git a/etc/visual-studio/ot-ncp-spi.vcxproj b/etc/visual-studio/ot-ncp-spi.vcxproj
index cc56e3d19..0dbf5c68f 100644
--- a/etc/visual-studio/ot-ncp-spi.vcxproj
+++ b/etc/visual-studio/ot-ncp-spi.vcxproj
@@ -39,6 +39,7 @@
%(PreprocessorDefinitions);
OPENTHREAD_CONFIG_FILE="openthread-windows-config.h";
+ OPENTHREAD_MULTIPLE_INSTANCE;
%(AdditionalIncludeDirectories);
diff --git a/etc/visual-studio/ot-ncp-uart.vcxproj b/etc/visual-studio/ot-ncp-uart.vcxproj
index c1c8767ab..5536ecf99 100644
--- a/etc/visual-studio/ot-ncp-uart.vcxproj
+++ b/etc/visual-studio/ot-ncp-uart.vcxproj
@@ -39,6 +39,7 @@
%(PreprocessorDefinitions);
OPENTHREAD_CONFIG_FILE="openthread-windows-config.h";
+ OPENTHREAD_MULTIPLE_INSTANCE;
%(AdditionalIncludeDirectories);
diff --git a/examples/apps/cli/main.c b/examples/apps/cli/main.c
index b0c99faac..78c3d51ce 100644
--- a/examples/apps/cli/main.c
+++ b/examples/apps/cli/main.c
@@ -40,6 +40,18 @@
#include
#include
+#ifdef OPENTHREAD_MULTIPLE_INSTANCE
+void *otPlatCAlloc(size_t aNum, size_t aSize)
+{
+ return calloc(aNum, aSize);
+}
+
+void otPlatFree(void *aPtr)
+{
+ free(aPtr);
+}
+#endif
+
void otSignalTaskletPending(otInstance *aInstance)
{
(void)aInstance;
diff --git a/examples/apps/ncp/main.c b/examples/apps/ncp/main.c
index 97dfe1d98..d33ed009b 100644
--- a/examples/apps/ncp/main.c
+++ b/examples/apps/ncp/main.c
@@ -40,6 +40,18 @@
#include
#include
+#ifdef OPENTHREAD_MULTIPLE_INSTANCE
+void *otPlatCAlloc(size_t aNum, size_t aSize)
+{
+ return calloc(aNum, aSize);
+}
+
+void otPlatFree(void *aPtr)
+{
+ free(aPtr);
+}
+#endif
+
void otSignalTaskletPending(otInstance *aInstance)
{
(void)aInstance;
diff --git a/tests/unit/test_aes.cpp b/tests/unit/test_aes.cpp
index f2895ec3c..1a32fa3c9 100644
--- a/tests/unit/test_aes.cpp
+++ b/tests/unit/test_aes.cpp
@@ -33,7 +33,9 @@
#include
#include
+#ifndef OPENTHREAD_MULTIPLE_INSTANCE
static Thread::Crypto::MbedTls mbedtls;
+#endif
/**
* Verifies test vectors from IEEE 802.15.4-2006 Annex C Section C.2.1
diff --git a/tests/unit/test_fuzz.cpp b/tests/unit/test_fuzz.cpp
index e824b8857..3e10a368f 100644
--- a/tests/unit/test_fuzz.cpp
+++ b/tests/unit/test_fuzz.cpp
@@ -110,7 +110,7 @@ void TestFuzz(uint32_t aSeconds)
#endif
#ifdef OPENTHREAD_MULTIPLE_INSTANCE
- uint64_t otInstanceBufferLength = 0;
+ size_t otInstanceBufferLength = 0;
uint8_t *otInstanceBuffer = NULL;
// Call to query the buffer size
@@ -119,7 +119,7 @@ void TestFuzz(uint32_t aSeconds)
// Call to allocate the buffer
otInstanceBuffer = (uint8_t *)malloc(otInstanceBufferLength);
VerifyOrQuit(otInstanceBuffer != NULL, "Failed to allocate otInstance");
- memset(&otInstanceBuffer, 0, otInstanceBufferLength);
+ memset(otInstanceBuffer, 0, otInstanceBufferLength);
// Initialize Openthread with the buffer
aInstance = otInstanceInit(otInstanceBuffer, &otInstanceBufferLength);
diff --git a/tests/unit/test_hmac_sha256.cpp b/tests/unit/test_hmac_sha256.cpp
index 526d72e24..41dd289de 100644
--- a/tests/unit/test_hmac_sha256.cpp
+++ b/tests/unit/test_hmac_sha256.cpp
@@ -34,7 +34,9 @@
#include
#include
-static Thread::Crypto::MbedTls mbedtls;
+#ifndef OPENTHREAD_MULTIPLE_INSTANCE
+static Thread::Crypto::MbedTls mMbedTls;
+#endif
void TestHmacSha256(void)
{
diff --git a/tests/unit/test_message_queue.cpp b/tests/unit/test_message_queue.cpp
index 97c99efde..490a339ae 100644
--- a/tests/unit/test_message_queue.cpp
+++ b/tests/unit/test_message_queue.cpp
@@ -192,7 +192,23 @@ void TestMessageQueueOtApis(void)
ThreadError error;
otMessage message;
+#ifdef OPENTHREAD_MULTIPLE_INSTANCE
+ size_t otInstanceBufferLength = 0;
+ uint8_t *otInstanceBuffer = NULL;
+
+ // Call to query the buffer size
+ (void)otInstanceInit(NULL, &otInstanceBufferLength);
+
+ // Call to allocate the buffer
+ otInstanceBuffer = (uint8_t *)malloc(otInstanceBufferLength);
+ assert(otInstanceBuffer);
+
+ // Initialize Openthread with the buffer
+ instance = otInstanceInit(otInstanceBuffer, &otInstanceBufferLength);
+#else
instance = otInstanceInit();
+#endif
+
VerifyOrQuit(instance != NULL, "Failed to get and init an otInstance.\n");
for (int i = 0; i < kNumTestMessages; i++)
@@ -251,6 +267,11 @@ void TestMessageQueueOtApis(void)
// Remove all element and make sure queue is empty
SuccessOrQuit(otMessageQueueDequeue(&queue, msg[2]), "Failed to dequeue a message from otMessageQueue.\n");
VerifyMessageQueueContentUsingOtApi(&queue, 0);
+
+ otInstanceFinalize(instance);
+#ifdef OPENTHREAD_MULTIPLE_INSTANCE
+ free(otInstanceBuffer);
+#endif
}
#ifdef ENABLE_TEST_MAIN
diff --git a/tests/unit/test_platform.cpp b/tests/unit/test_platform.cpp
index a3a042efc..ea2b03076 100644
--- a/tests/unit/test_platform.cpp
+++ b/tests/unit/test_platform.cpp
@@ -81,6 +81,18 @@ bool sDiagMode = false;
extern "C" {
+#ifdef OPENTHREAD_MULTIPLE_INSTANCE
+ void *otPlatCAlloc(size_t aNum, size_t aSize)
+ {
+ return calloc(aNum, aSize);
+ }
+
+ void otPlatFree(void *aPtr)
+ {
+ free(aPtr);
+ }
+#endif
+
void otSignalTaskletPending(otInstance *)
{
}