RPGLE: Неудачный READ разблокирует ранее заблокированную запись? - PullRequest
1 голос
/ 06 ноября 2019

Вот моя проблема: у меня есть READE в цикле. В этом цикле я могу обновить запись или нет, в зависимости от условия.

В этой ситуации: у меня есть красная последняя записьпоследовательность заблокирована. Не удовлетворяет условию, поэтому не обновляется и не разблокируется. Программа пытается прочитать следующую запись, но она не удалась, но ...

Мой вопрос: освобождает ли он блокировку для другой записи или нет?

Ответы [ 2 ]

3 голосов
/ 06 ноября 2019

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

Fp1facll1  UF   E           k DISK                                       
D*                                                                       
Dexcmd            s            250    inz('DLYJOB DLY(10)')              
Dexlg             s             15P 5 inz(250)                           
C*                                                                       
C                   move      'F012'        adqtc4                       
C     adqtc4        setll     p1facll1                                   
C     adqtc4        reade     p1facll1                               58  
C     *in58         downe     '1'                                        
C* Update never occurs                                                   
C                   if        '0'                                        
C                   update    MEFRESM                                    
C                   endif                                                
C     adqtc4        reade     p1facll1                               58  
C                   enddo                                                
C* Wait indefinitively                                                   
C                   dow       '1'                                        
C                   call      'QCMDEXC'                                  
C                   parm                    excmd                         
C                   parm                    exlg                         
C                   enddo                                                
C                   SETON                                        LR      

Запустилась в первый раз (по SBMJOB) входитв бесконечном цикле ожидания (нормально). Не останавливая программу, я запустил ее во второй раз, завершив, что она тоже входит в бесконечный цикл, доказывая, что первая не заблокировала последнюю запись, что она успешно красного цвета, в противном случае она должна иметь ошибку чтения

0 голосов
/ 06 ноября 2019

Нет. Используйте UNLOCK , чтобы освободить вашу запись.

...