def lock_current_objects(cursor, read_current_oid_ints, shared_locks_block):
    """
        Lock the objects being modified in the current transaction
        exclusively, plus the relevant rows for the objects whose OIDs
        are contained in *read_current_oid_ints* with a read lock.

        The exclusive locks should always be taken in a blocking fashion;
        the shared read locks should be taken without blocking (raising an
        exception if blocking would occur) if possible, unless *shared_locks_block*
        is set to True.

        See :meth:`IRelStorageAdapter.lock_objects_and_detect_conflicts`
        for a description of the expected behaviour.

        This should be done as part of the voting phase of TPC, before
        taking out the final commit lock.

        Returns nothing.

        Typically this will be followed by a call to
        :meth:`detect_conflict`.
        """
