I wrote the code that if interrupt generated, get gsm location and send a  message.
first time interrupt generated, got correct gsm location using (AT+CIPGSMLOC=1,1) and successfully send message using command AT+CMGS=+91xxxxxxxx)
    
But next time when interrupt generated then AT+CIPGSMLOC=1,1 is giving wrong location. 
When i commented the code to send message then on every interrupt generated , i am getting correct gsm location. So it seems like problem is occurring after sending message. but no clue what exactly going wrong . following is my code

Note: on restarting of module again getting correct location first time before sending message

    void setup() {
      mySerial.begin(9600);                 
      Serial.begin(9600);  
      
      while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB port only
      }
    
      // initialize the pushbutton pin as an input:
      pinMode(sensorPin, INPUT);
      // Attach an interrupt to the ISR vector
      attachInterrupt(0, pin_ISR, FALLING);
    }
    /////////***GSM RESPONSE***///////////     
    String DisplayGSMResponse()
    {
          if(mySerial.available())
          {
          String gsm_input="";
          while(mySerial.available()) 
          {
          gsm_input+= (char)mySerial.read();
          }
          gsm_input.trim();
          
          delay(1000);
          Serial.println(gsm_input);
          return gsm_input;
          }
    }
    void SendMessage(String mobNum,String Location)
    {
      Serial.println("Sending message..");
    
      mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
      delay(2000);  // Delay of 1000 milli seconds or 1 second
      DisplayGSMResponse();
      
      mySerial.println("AT+CMGS=\""+mobNum+"\"\r"); // mobile Number
      delay(4000);
      DisplayGSMResponse();
      cleanBuffer();
      mySerial.print("test");// The SMS text you want to send
      delay(100);
      mySerial.println((char)26);// ASCII code of CTRL+Z
      delay(8000);
      DisplayGSMResponse();
    }
    void gprsInit() {
      if (isGPRSInit) {
        return;
      }
      Serial.println("GPRS INITIALIZING");
      mySerial.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");
      delay(2000);
      DisplayGSMResponse();
      
      mySerial.println("AT+SAPBR=3,1,\"APN\",\"INTERNET\"");
      delay(2000);
      DisplayGSMResponse();
      
      mySerial.println("AT+SAPBR=1,1");
      delay(8000);
      DisplayGSMResponse();
      
      mySerial.println("AT+SAPBR=2,1");
      delay(2000);
      DisplayGSMResponse();
    
      isGPRSInit = true;
    }
    String getGPS() {
      Serial.println("GETTING GPS LOCATION");
      String loc = "";
      String location = "";
      
      mySerial.println("AT+CIPGSMLOC=1,1");
      delay(3000);
      loc = DisplayGSMResponse();  
      
      return location; 
    }
    
    void loop() {
       if (buttonState == 1)
       {
        detachInterrupt(0);
        
        gprsInit();
        location = getGPS();
        SendMessage(mobileNumber, location);
        
        gprsterm();
        Serial.println("location = " + location);
        buttonState = 0;
        location = "";
        attachInterrupt(0, pin_ISR, FALLING );
      }
    }
    
    void pin_ISR() {
      buttonState = 1;
      Serial.println("interrupt");
    }