[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference clt::pplrtl

Title:Parallel Processing Run Time Library Discussions
Moderator:WTFN::SCALES
Created:Tue Jun 16 1987
Last Modified:Wed May 21 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:208
Total number of notes:920

207.0. "PPL process HIBERNATES - ungrab_marker_ problem" by CSC32::D_SANFORD () Wed Feb 19 1997 17:18

    PPL, OpenVMS Alpha any version

    Customer has an application which uses PPL$CREATE_WORK_QUEUE along with
    PPL$REMOVE_WORK_ITEM and PPL$INSERT_WORK_ITEM.  Normally this works as
    expected, but once a week (once every 2 billion iterations) one of his
    processes will go into hibernation (HIB) and never wake up.  From 
    looking at the PPL sources on the shareware he believes he found a
    condition whereby MACRO "ungrab_marker_" may be performing a testbitcci
    at a time where another process can write to the same location.

    He tried to modify the source himself, but it appears some of the 
    necessary files are missing.

    The customer needs to know if engineering can make this change or if
    they can provide the additional files required for PPL.

    Is PPL officially retired?  I hope the answer is YES.

    Regards, Drew Sanford


    From file PPLLIB.REQ

macro

        !+
        ! Macro to ungrab a marker for a queue
        !-

    ungrab_marker_(q) =
        begin
        while
            insq_busy_(insqti(q[mkr_l_flink], ppl$$gl_pplsect[pplsect_q_mkrs]))
            do 0;
        testbitcci(q[mkr_v_valid]);
        end %;


    Customer believes that the correct code would be as follows.  He believes
    you need exclusive access to "testbitcci(q[mkr_v_valid])", doing it after
    the while allows others access to q[mkr_v_valid] sometimes giving 
    incorrect results.
    
    He belives this is the correct way:
    
macro

        !+
        ! Macro to ungrab a marker for a queue
        !-

    ungrab_marker_(q) =
        begin
        testbitcci(q[mkr_v_valid]);
        while
            insq_busy_(insqti(q[mkr_l_flink], ppl$$gl_pplsect[pplsect_q_mkrs]))
            do 0;
        end %;
T.RTitleUserPersonal
Name
DateLines