*** Shareable.pm	Thu Jan  1 06:42:22 1998
--- Shareable.pm.new	Thu Jan  1 06:42:44 1998
***************
*** 10,16 ****
  	    @ISA @EXPORT_OK
  	    %EXPORT_TAGS %Shm_Info
  	    $Package $Debug
! 	    );
  use subs qw(IPC_CREAT IPC_EXCL IPC_RMID IPC_STAT IPC_PRIVATE
  	    SHM_BUFSIZ SHM_HEADSIZE SHM_FOOTSIZE
  	    SHM_VERSSEM SHM_RLOCKSEM SHM_WLOCKSEM
--- 10,16 ----
  	    @ISA @EXPORT_OK
  	    %EXPORT_TAGS %Shm_Info
  	    $Package $Debug
! 	    $MAXVER);
  use subs qw(IPC_CREAT IPC_EXCL IPC_RMID IPC_STAT IPC_PRIVATE
  	    SHM_BUFSIZ SHM_HEADSIZE SHM_FOOTSIZE
  	    SHM_VERSSEM SHM_RLOCKSEM SHM_WLOCKSEM
***************
*** 31,36 ****
--- 31,37 ----
  $VERSION = '0.28';
  $Package = 'IPC::Shareable';
  $Debug = ($Debug or undef);
+ $MAXVER  = 32767;
  
  # --- The Autoload method as created by h2xs
  sub AUTOLOAD {
***************
*** 236,245 ****
      debug "$Package\:\:STORE: previous version number was $version";
  
      # --- Increment it
!     $opstring = pack('sss', SHM_VERSSEM, 1, 0);
!     semop($semid, $opstring) or
! 	croak "$Package\:\:STORE: semop returned false";
! 	
      # --- Diagnostic
      $version = semctl($semid, 0, GETVAL, $arg) or
  	croak "$Package\:\:STORE: semop returned false";
--- 237,249 ----
      debug "$Package\:\:STORE: previous version number was $version";
  
      # --- Increment it
!     if ($version >= $MAXVER) { # semop will fail if we roll over
!       semctl($semid, 0, SETVAL, 1); 
!     } else {
!       $opstring = pack('sss', SHM_VERSSEM, 1, 0);
!       semop($semid, $opstring) or
!           croak "$Package\:\:STORE: semop returned false: $!";
!     }
      # --- Diagnostic
      $version = semctl($semid, 0, GETVAL, $arg) or
  	croak "$Package\:\:STORE: semop returned false";