GET_LOCK блокировка не снимается

nalim

Новичок
GET_LOCK блокировка не снимается

Скрипт работает по крону
с теми же таблицами работают и другие скрипты
mysql 5.1.26

продолжительность работы сильно может различаться,
одновременно с другим самим собой работать не может,
поэтому делает блокировку по имени:

PHP:
$hostname_catalog = "localhost"; 
$database_catalog = ".."; 
$username_catalog = "..";
$password_catalog = "..";
$catalog = mysql_pconnect($hostname_catalog, $username_catalog, $password_catalog) 
  or trigger_error(mysql_error(),E_USER_ERROR);          

$start_flag = $catalog->query(sprintf("SELECT IS_FREE_LOCK('%s') as flag", 'new_indexer2')) 
  or trigger_error($catalog->error, E_USER_ERROR);         	

list($sf) = $start_flag -> fetch_array();    	    
if ($sf == 0 )     
   {     	
                                echo ('allredy started. exiting...');     	
                                die();     
   }
проблема втом что блокировка "зависла" и несмотря на то что скрипт уж давно завершен,
IS_FREE_LOCK все время возвращает 0.

Можно сделать IS_USED_LOCK и удалить это соединение,
но это такой эффект уже не первый раз повторяется.
Как избежать "бессмертных" блокировок?
чтото неверно в коде?
 

findnext

Новичок
Locks obtained with GET_LOCK() do not interact with transactions.
it is released when your connection terminates

-~{}~ 23.12.08 14:35:

nalim
наверное нужно разрывать соединение чтобы получить IS_FREE_LOCK = 1
 

nalim

Новичок
да, спасибо всё дело в mysql_pconnect
постоянное соединение не рвется отсюда и зависание блокировки
 
Сверху