svn commit: r194736 - in stable/7/sys: . contrib/pf dev/drm
Robert Noland
rnoland at FreeBSD.org
Tue Jun 23 16:12:41 UTC 2009
Author: rnoland
Date: Tue Jun 23 16:12:40 2009
New Revision: 194736
URL: http://svn.freebsd.org/changeset/base/194736
Log:
Merge 194539 from HEAD
realloc() behaves identically to malloc when passed a NULL object pointer
If an error does occur we would have left max_context with an incorrect
value.
Modified:
stable/7/sys/ (props changed)
stable/7/sys/contrib/pf/ (props changed)
stable/7/sys/dev/drm/drm_context.c
Modified: stable/7/sys/dev/drm/drm_context.c
==============================================================================
--- stable/7/sys/dev/drm/drm_context.c Tue Jun 23 16:11:44 2009 (r194735)
+++ stable/7/sys/dev/drm/drm_context.c Tue Jun 23 16:12:40 2009 (r194736)
@@ -72,34 +72,23 @@ int drm_ctxbitmap_next(struct drm_device
}
set_bit(bit, dev->ctx_bitmap);
- DRM_DEBUG("drm_ctxbitmap_next bit : %d\n", bit);
+ DRM_DEBUG("bit : %d\n", bit);
if ((bit+1) > dev->max_context) {
- dev->max_context = (bit+1);
- if (dev->context_sareas != NULL) {
- drm_local_map_t **ctx_sareas;
-
- ctx_sareas = realloc(dev->context_sareas,
- dev->max_context * sizeof(*dev->context_sareas),
- DRM_MEM_SAREA, M_NOWAIT);
- if (ctx_sareas == NULL) {
- clear_bit(bit, dev->ctx_bitmap);
- DRM_UNLOCK();
- return -1;
- }
- dev->context_sareas = ctx_sareas;
- dev->context_sareas[bit] = NULL;
- } else {
- /* max_context == 1 at this point */
- dev->context_sareas = malloc(dev->max_context *
- sizeof(*dev->context_sareas), DRM_MEM_SAREA,
- M_NOWAIT);
- if (dev->context_sareas == NULL) {
- clear_bit(bit, dev->ctx_bitmap);
- DRM_UNLOCK();
- return -1;
- }
- dev->context_sareas[bit] = NULL;
+ drm_local_map_t **ctx_sareas;
+ int max_ctx = (bit+1);
+
+ ctx_sareas = realloc(dev->context_sareas,
+ max_ctx * sizeof(*dev->context_sareas),
+ DRM_MEM_SAREA, M_NOWAIT);
+ if (ctx_sareas == NULL) {
+ clear_bit(bit, dev->ctx_bitmap);
+ DRM_DEBUG("failed to allocate bit : %d\n", bit);
+ DRM_UNLOCK();
+ return -1;
}
+ dev->max_context = max_ctx;
+ dev->context_sareas = ctx_sareas;
+ dev->context_sareas[bit] = NULL;
}
DRM_UNLOCK();
return bit;
More information about the svn-src-stable-7
mailing list