I had problems during the run of a cron job that takes longer than an hour (it sends > 400 mails). The function poormanscron_run_cron_check() in poormanscron.module seems that have a bug.
$threshold_semaphore is used as a boolean. Subtracting it from REQUEST_TIME (not sure where this value is defined) does not make sense. Probably using $cron_threshold was the idea. Sorry for my superficially analysis but I hope this helps.

  $threshold_semaphore = variable_get('cron_threshold_semaphore', FALSE);
  if ($threshold_semaphore) {
    if (REQUEST_TIME - $threshold_semaphore > 3600) {
      // Either cron has been running for more than an hour or the semaphore
      // was not reset due to a database error.
      watchdog('cron', 'Cron has been running for more than an hour and is most likely stuck.', array(), WATCHDOG_ERROR);

      // Release the cron threshold semaphore.


fbo’s picture

Seconded, tried changing
if ($time - $threshold_semaphore > 3600) {
if ($time - $cron_threshold > 3600) {
and it seems to have solved the problem