def setChanHolding(self, channel, level=None, block=True, mapping=None):
        """Define and set the holding values for this channel
        If *block* is True, then return only after the value has been set on the DAQ.
        If *block* is False, then simply schedule the change to take place when the DAQ is available.
        *mapping* is a DataMapping object which tells the device how to translate *level* into
            a voltage on the physical DAQ channel. If *mapping* is None, then it will use self.getMapping(*channel*)
            to determine the correct mapping.
        """
        prof = Profiler(disabled=True)
        with self._DGLock:
            prof('lock')
            # print "set holding", channel, level
            ### Set correct holding level here...
            if level is None:
                level = self._DGHolding[channel]
                if level is None:
                    raise Exception("No remembered holding level for channel %s" % channel)
            else:
                self._DGHolding[channel] = level

            if mapping is None:
                mapping = self.getMapping(channel)
            val = mapping.mapToDaq(channel, self._DGHolding[channel])
            prof('map')
            # print "Set holding for channel %s: %f => %f" % (channel, self._DGHolding[channel], val)

            chConf = self._DGConfig[channel]
            isVirtual = chConf.get('virtual', False)
            if not isVirtual:
                daq = chConf['device']
                chan = chConf['channel']
                daqDev = self.dm.getDevice(daq)
            prof('get dev')

        ## release DGLock before setChannelValue
        if not isVirtual:
            if block:
                daqDev.setChannelValue(chan, val, block=True)
            else:
                daqDev.setChannelValue(chan, val, block=False,
                                       delaySetIfBusy=True)  ## Note: If a task is running, this will not be set until it completes.
        prof('set channel value')
        self.sigHoldingChanged.emit(channel, level)
        prof('emit')