Skip to content

Serial Listener Leak #21

@mihainigrini

Description

@mihainigrini

After using the serial listener for some time java kills the process because of memory leak. ()
package bbb;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import org.bulldog.beagleboneblack.BBBNames;
import org.bulldog.core.io.serial.SerialDataEventArgs;
import org.bulldog.core.io.serial.SerialDataListener;
import org.bulldog.core.io.serial.SerialPort;
import org.bulldog.core.platform.Board;
import org.bulldog.core.platform.Platform;
//import org.bulldog.core.util.BulldogUtil;

/**

  • @author Datenheld
    *
    */
    public class SerialExample {
    public static StringBuilder sb = new StringBuilder();
    public static void main(String... args) throws IOException {

    //Get your platform
    final Board board = Platform.createBoard();
    
    //Retrieve a serial port (UART2) and configure it
    SerialPort serial2 = board.getSerialPort(BBBNames.UART2);
    serial2.setBaudRate(9600);
    serial2.setBlocking(false);
    serial2.open();
    
    
    final String host = "192.168.17.44" ;// inner range device host ip adddress
    final int port = 7575;
    
    
    serial2.addListener(new SerialDataListener() {
    
        @Override
        public void onSerialDataAvailable(SerialDataEventArgs args) {
    
             //String hex_buff = args.getDataAsString();
           /* for (byte b : args.getData()) {
                sb.append(String.format("%02X ", b));
            }
           */
             for (byte b : args.getData()) {
                 sb.append(String.format("%02X ", b));
    
             }
             //sb.append(hex_buff);
             System.out.println("POLON MESSGE " + sb);
            if (sb.length() >= 7 ){
             System.out.println("char at " + sb.charAt(sb.length() - 1));
             System.out.println("char at " + sb.charAt(sb.length() - 2));
             System.out.println("char at " + sb.charAt(sb.length() - 3));
             System.out.println("char at " + sb.charAt(sb.length() - 4));
             System.out.println("char at " + sb.charAt(sb.length() - 5));
             System.out.println("char at " + sb.charAt(sb.length() - 6));
    
            }
             if(        (sb.length()>=7)
                 &&
                        (sb.charAt(sb.length() - 2) == 'A')
                 &&
                        (sb.charAt(sb.length() - 3) == '0')
                 &&
                        (sb.charAt(sb.length() - 4) == ' ')
                 &&
                        (sb.charAt(sb.length() - 5) == 'A')
                 &&
                        (sb.charAt(sb.length() - 6) == '0')
                 &&
                        (sb.charAt(sb.length() - 7) == ' '))
                 {
                        System.out.println("log ok");
    
                         System.out.println(" Time milis =====>>>>>"+System.currentTimeMillis() );      
    
                        SendOverTCPIP(sb.toString());
    
                        sb = new StringBuilder();
                 }
    
            // TO DO use delimiter 0A 0A  position last from sb-1 and last from sb 
            System.out.println(sb.toString());
            System.out.println(sb.length());
    
    
         //   System.out.println(args.getDataAsString());
        //  SendOverTCPIP(args.getDataAsString());
        }
    
        private void SendOverTCPIP(String dataAsString) 
        {
    
            Socket innerrangesocket = null;
    
            try{
                InetAddress inetAddressIR = InetAddress.getByName(host);
                innerrangesocket = new Socket(inetAddressIR, port);
                PrintWriter myprintwriter = new PrintWriter(innerrangesocket.getOutputStream(), true );
                String userinput = dataAsString;
    
                myprintwriter.println(userinput);
    
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                if(innerrangesocket != null)
                    try {
                        innerrangesocket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
    
            }
    
        }
    
    });;
    

    serial2.writeString("0331123491\r\n");
    //BulldogUtil.sleepMs(3000);
    try {
    Thread.sleep(3000);
    } catch (InterruptedException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
    serial2.writeString("00191\r\n");
    //serialPort.writeString("0331123491\r\n"); ARMARE
    // serialPort.writeString("040112348F\r\n"); DEZARMARE

         serial2.writeString("00191\r\n");
        try {
            Thread.sleep(8000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
        //System.out.println("Sleep 500 Ms");
    
        //BulldogUtil.sleepMs(500);
    }
    
    //serial2.close();
    //serial1.close();
    

    }
    // public void main(String args){}do here
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions