fixed concurent mount problem
authorBarthaM@N3SIM1218.D03.arc.local
Fri, 06 Jun 2014 10:46:55 +0100
changeset 184416e097660da
parent 183 a4ea59670b6b
child 185 fed80e5183b4
fixed concurent mount problem
OpenSecurity/bin/opensecurity_client_restful_server.py
     1.1 --- a/OpenSecurity/bin/opensecurity_client_restful_server.py	Fri Jun 06 10:38:21 2014 +0100
     1.2 +++ b/OpenSecurity/bin/opensecurity_client_restful_server.py	Fri Jun 06 10:46:55 2014 +0100
     1.3 @@ -309,6 +309,8 @@
     1.4      else:
     1.5          logger.error("Network path unreachable...")
     1.6          return 1    
     1.7 +
     1.8 +mount_lock = threading.Lock()
     1.9  		
    1.10  # handles netumount request                    
    1.11  class MountNetworkDriveHandler(threading.Thread): 
    1.12 @@ -318,19 +320,6 @@
    1.13          self.networkPath = net_path
    1.14      
    1.15      def run(self):
    1.16 -        drive = genNetworkDrive()
    1.17 -        if not drive:
    1.18 -            logger.error("Failed to assign drive letter for: " + self.networkPath)
    1.19 -            return 1
    1.20 -        else:
    1.21 -            logger.info("Assigned drive " + drive + " to " + self.networkPath)
    1.22 -        
    1.23 -        #Check for drive availability
    1.24 -        drive = drive+':'
    1.25 -        if os.path.exists(drive):
    1.26 -            logger.error("Drive letter is already in use: " + drive)
    1.27 -            return 1
    1.28 -        
    1.29          #Check for network resource availability
    1.30          retry = 20
    1.31          while not os.path.exists(self.networkPath):
    1.32 @@ -339,8 +328,21 @@
    1.33              logger.info("Path not accessible: " + self.networkPath + " retrying")
    1.34              time.sleep(1)
    1.35              retry-=1
    1.36 -
    1.37 -        return mapDrive(drive, self.networkPath, "", "")
    1.38 +        with mount_lock:
    1.39 +            drive = genNetworkDrive()
    1.40 +            if not drive:
    1.41 +                logger.error("Failed to assign drive letter for: " + self.networkPath)
    1.42 +                return 1
    1.43 +            else:
    1.44 +                logger.info("Assigned drive " + drive + " to " + self.networkPath)
    1.45 +            
    1.46 +            #Check for drive availability
    1.47 +            drive = drive+':'
    1.48 +            if os.path.exists(drive):
    1.49 +                logger.error("Drive letter is already in use: " + drive)
    1.50 +                return 1
    1.51 +            
    1.52 +            return mapDrive(drive, self.networkPath, "", "")
    1.53  
    1.54  class os_netmount:
    1.55