[Python-checkins] CVS: python/dist/src/Modules gcmodule.c,2.20,2.21

Tim Peters tim_one@users.sourceforge.net
Sat, 06 Oct 2001 12:04:03 -0700


Update of /cvsroot/python/python/dist/src/Modules
In directory usw-pr-cvs1:/tmp/cvs-serv24971/python/Modules

Modified Files:
	gcmodule.c 
Log Message:
Repaired the debug Windows deaths in test_descr, by allocating enough
pad memory to properly align the __dict__ pointer in all cases.

gcmodule.c/objimpl.h, _PyObject_GC_Malloc:
+ Added a "padding" argument so that this flavor of malloc can allocate
  enough bytes for alignment padding (it can't know this is needed, but
  its callers do).

typeobject.c, PyType_GenericAlloc:
+ Allocated enough bytes to align the __dict__ pointer.
+ Sped and simplified the round-up-to-PTRSIZE logic.
+ Added blank lines so I could parse the if/else blocks <0.7 wink>.


Index: gcmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/gcmodule.c,v
retrieving revision 2.20
retrieving revision 2.21
diff -C2 -d -r2.20 -r2.21
*** gcmodule.c	2001/10/06 08:03:20	2.20
--- gcmodule.c	2001/10/06 19:04:00	2.21
***************
*** 799,809 ****
  
  PyObject *
! _PyObject_GC_Malloc(PyTypeObject *tp, int size)
  {
  	PyObject *op;
  #ifdef WITH_CYCLE_GC
! 	const size_t nbytes = sizeof(PyGC_Head) +
! 			      (size_t)_PyObject_VAR_SIZE(tp, size);
! 	PyGC_Head *g = PyObject_MALLOC(nbytes);						
  	if (g == NULL)
  		return (PyObject *)PyErr_NoMemory();
--- 799,810 ----
  
  PyObject *
! _PyObject_GC_Malloc(PyTypeObject *tp, int nitems, size_t padding)
  {
  	PyObject *op;
  #ifdef WITH_CYCLE_GC
! 	const size_t basic = (size_t)_PyObject_VAR_SIZE(tp, nitems);
! 	const size_t nbytes = sizeof(PyGC_Head) + basic + padding;
! 
! 	PyGC_Head *g = PyObject_MALLOC(nbytes);
  	if (g == NULL)
  		return (PyObject *)PyErr_NoMemory();
***************
*** 821,825 ****
  	op = FROM_GC(g);
  #else
! 	op = PyObject_MALLOC(_PyObject_VAR_SIZE(tp, size));
  	if (op == NULL)
  		return (PyObject *)PyErr_NoMemory();
--- 822,826 ----
  	op = FROM_GC(g);
  #else
! 	op = PyObject_MALLOC(_PyObject_VAR_SIZE(tp, nitems) + padding);
  	if (op == NULL)
  		return (PyObject *)PyErr_NoMemory();
***************
*** 832,836 ****
  _PyObject_GC_New(PyTypeObject *tp)
  {
! 	PyObject *op = _PyObject_GC_Malloc(tp, 0);
  	return PyObject_INIT(op, tp);
  }
--- 833,837 ----
  _PyObject_GC_New(PyTypeObject *tp)
  {
! 	PyObject *op = _PyObject_GC_Malloc(tp, 0, 0);
  	return PyObject_INIT(op, tp);
  }
***************
*** 839,843 ****
  _PyObject_GC_NewVar(PyTypeObject *tp, int size)
  {
! 	PyVarObject *op = (PyVarObject *) _PyObject_GC_Malloc(tp, size);
  	return PyObject_INIT_VAR(op, tp, size);
  }
--- 840,844 ----
  _PyObject_GC_NewVar(PyTypeObject *tp, int size)
  {
! 	PyVarObject *op = (PyVarObject *) _PyObject_GC_Malloc(tp, size, 0);
  	return PyObject_INIT_VAR(op, tp, size);
  }