##### pygame documentation | Pygame Home || Help Contents || Reference Index Most useful stuff: Color | display | draw | event | font | image | key | locals | mixer | mouse | Rect | Surface | time | music | pygame Advanced stuff: cursors | joystick | mask | sprite | transform | BufferProxy | freetype | gfxdraw | midi | Overlay | PixelArray | pixelcopy | sndarray | surfarray | math Other: camera | cdrom | examples | fastevent | scrap | tests | touch | version

## src_c/surflock.c

This extension module implements SDL surface locking for the `pygame.Surface` pygame object for representing images type.

Header file: src_c/include/pygame.h

`pgLifetimeLockObject`
  PyObject *`surface`

    An SDL locked pygame surface.

  PyObject *`lockobj`

    The Python object which owns the lock on the surface. This field does not own a reference to the object.

  The lifetime lock type instance. A lifetime lock pairs a locked pygame surface with the Python object that locked the surface for modification. The lock is removed automatically when the lifetime lock instance is garbage collected.

PyTypeObject *`pgLifetimeLock_Type`

  The pygame internal surflock lifetime lock object type.

int `pgLifetimeLock_Check`(PyObject *x)

  Return true if Python object x is a `pgLifetimeLock_Type` instance, false otherwise. This will return false on `pgLifetimeLock_Type` subclass instances as well.

void `pgSurface_Prep`(pgSurfaceObject *surfobj)

  If surfobj is a subsurface, then lock the parent surface with surfobj the owner of the lock.

void `pgSurface_Unprep`(pgSurfaceObject *surfobj)

  If surfobj is a subsurface, then release its lock on the parent surface.

int `pgSurface_Lock`(pgSurfaceObject *surfobj)

  Lock pygame surface surfobj, with surfobj owning its own lock.

int `pgSurface_LockBy`(pgSurfaceObject *surfobj, PyObject *lockobj)

  Lock pygame surface surfobj with Python object lockobj the owning the lock.

  The surface will keep a weak reference to object lockobj, and eventually remove the lock on itself if lockobj is garbage collected. However, it is best if lockobj also keep a reference to the locked surface and call to `pgSurface_UnLockBy()` when finished with the surface.

int `pgSurface_UnLock`(pgSurfaceObject *surfobj)

  Remove the pygame surface surfobj object's lock on itself.

int `pgSurface_UnLockBy`(pgSurfaceObject *surfobj, PyObject *lockobj)

  Remove the lock on pygame surface surfobj owned by Python object lockobj.

PyObject *`pgSurface_LockLifetime`(PyObject *surfobj, PyObject *lockobj)

  Lock pygame surface surfobj for Python object lockobj and return a new `pgLifetimeLock_Type` instance for the lock.

  This function is not called anywhere within pygame. It and pgLifetimeLock_Type are candidates for removal.

Edit on GitHub