summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (from parent 1: eaec139)
raw | patch | inline | side by side (from parent 1: eaec139)
author | Justin Sobota <jsobota@ti.com> | |
Fri, 14 Nov 2014 20:56:41 +0000 (15:56 -0500) | ||
committer | Justin Sobota <jsobota@ti.com> | |
Fri, 14 Nov 2014 20:56:41 +0000 (15:56 -0500) |
docs/ReleaseNotes_RM.doc | patch | blob | history | |
docs/ReleaseNotes_RM.pdf | patch | blob | history | |
rm.h | patch | blob | history | |
src/rm_allocator.c | patch | blob | history |
index 2d4d370d4b6b3d9962cf666bc61a0860f1f259a7..c4b12f44580f18d17bb52345942e6c408d38560c 100644 (file)
Binary files a/docs/ReleaseNotes_RM.doc and b/docs/ReleaseNotes_RM.doc differ
Binary files a/docs/ReleaseNotes_RM.doc and b/docs/ReleaseNotes_RM.doc differ
index 444780917cc8896e7331f4716e072171d2727111..c7d725d2cbfc0250fb6304b7823ab1373077d3fd 100644 (file)
Binary files a/docs/ReleaseNotes_RM.pdf and b/docs/ReleaseNotes_RM.pdf differ
Binary files a/docs/ReleaseNotes_RM.pdf and b/docs/ReleaseNotes_RM.pdf differ
index 988401f50d8a9a462b95044a5c9e1b42a5963b25..7ea7f81dedcb6e5c673b2f0ade9bb78a4ac3a03d 100644 (file)
--- a/rm.h
+++ b/rm.h
/** A resource name specified in the GRL, policy, and/or service request is greater than
* RM_NAME_MAX_CHARS */
#define RM_ERROR_RESOURCE_NAME_TOO_LONG RM_ERROR_BASE-52
+/** RM failed to create a new allocator - Occurred because an instance that does not use
+ * allocators tried to create one (RM Client) */
+#define RM_ERROR_COULD_NOT_CREATE_NEW_ALLOCATOR RM_ERROR_BASE-53
/**
* @brief Maximum number of characters allowed for RM instance, resource, and
diff --git a/src/rm_allocator.c b/src/rm_allocator.c
index ac351569d4e56b9ce37355cbc4e0f4ee73e6aef6..0ea83f96d031973aa1b0e75a3b7894e79780a29f 100644 (file)
--- a/src/rm_allocator.c
+++ b/src/rm_allocator.c
}
else if (rmInst->instType == Rm_instType_CLIENT_DELEGATE) {
rmInst->u.cd.allocators = newAllocator;
- }
+ }
+ else {
+ /* Free allocator because instance type doesn't support allocators */
+ Rm_osalFree(newAllocator, sizeof(*newAllocator));
+ newAllocator = NULL;
+ }
}
}
return (newAllocator);
@@ -1385,7 +1390,7 @@ static int32_t allocatorExtractGrlResProps(Rm_Handle rmHandle, const char *resou
}
}
}
- else {
+ else if (retVal != RM_ERROR_COULD_NOT_CREATE_NEW_ALLOCATOR) {
rmAllocatorDelete(rmHandle, resourceName);
}
@@ -1414,21 +1419,27 @@ int32_t rmAllocatorCreate(Rm_Handle rmHandle, const char *resourceName, Rm_Resou
Rm_ResourceNode *treeNode = NULL;
allocator = allocatorAdd(rmHandle, resourceName);
- treeRoot = Rm_osalMalloc(sizeof(*treeRoot));
- RB_INIT(treeRoot);
+
+ if (allocator) {
+ treeRoot = Rm_osalMalloc(sizeof(*treeRoot));
+ RB_INIT(treeRoot);
- while (range != NULL) {
- treeNode = rmResourceNodeNew(range->base, range->length);
- RB_INSERT(_Rm_AllocatorResourceTree, treeRoot, treeNode);
- range = range->nextRange;
+ while (range != NULL) {
+ treeNode = rmResourceNodeNew(range->base, range->length);
+ RB_INSERT(_Rm_AllocatorResourceTree, treeRoot, treeNode);
+ range = range->nextRange;
+ }
+ if (rmInst->instType == Rm_instType_SHARED_SERVER) {
+ rmResourceTreeWb(treeRoot);
+ }
+
+ allocator->allocatorRootEntry = treeRoot;
+ RM_SS_OBJ_WB(allocator, Rm_Allocator);
+ return (RM_OK);
}
- if (rmInst->instType == Rm_instType_SHARED_SERVER) {
- rmResourceTreeWb(treeRoot);
+ else {
+ return (RM_ERROR_COULD_NOT_CREATE_NEW_ALLOCATOR);
}
-
- allocator->allocatorRootEntry = treeRoot;
- RM_SS_OBJ_WB(allocator, Rm_Allocator);
- return(RM_OK);
}
/* FUNCTION PURPOSE: Returns a pointer to the allocator list