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-all mailing list