Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3368: Cannot modify header information - headers already sent by (output started at /includes/bbcode.php:472)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3370: Cannot modify header information - headers already sent by (output started at /includes/bbcode.php:472)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3371: Cannot modify header information - headers already sent by (output started at /includes/bbcode.php:472)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3372: Cannot modify header information - headers already sent by (output started at /includes/bbcode.php:472)
OrbWorks Community Forum • View topic - Exiting causesMemory leaks

Exiting causesMemory leaks

A PocketC native palm library offering native forms and assorted utilities

Postby bschorre on Tue May 11, 2004 1:09 pm

Hi,

I'm writing an application, which should use several forms. I don't want to free the forms after using. They should be destroyed on exiting the application.

When I exit the application from the Main-Form directly after starting, there is no error. Only when I switched the forms and exit the application then I get 22 - 42 memory leaks.


Bjoern



Here's an extrct of my logfile!
=====================================================================


2131.435: === WARNING: ********************************************************************************
2131.435: === WARNING: Found 42 memory leaks for Serial Test (01.01.01). Information concerning the leaks can be found in the log file.
2131.435: === WARNING: ********************************************************************************
2304.053: WARNING: ========================================================
2304.053: WARNING: Memory Leaks
2304.053: WARNING: ========================================================
2304.053: WARNING: Begin Memory Leak Dump
2304.053: WARNING: ========================================================
2304.053: Relocatable chunk leaked at 0x0000B062, size = 2
2304.053: Chunk allocated by:
2304.053: <Unknown @ 0x0007EF30>
2304.053: <Unknown @ 0x00053ABC>
2304.053: <Unknown @ 0x000634F6>
2304.053: Chunk contents:
2304.053: 30 00 0.
2304.053: --------------------------------------------------------
2304.053: Relocatable chunk leaked at 0x0000B058, size = 2
2304.053: Chunk allocated by:
2304.053: <Unknown @ 0x0007EF30>
2304.053: <Unknown @ 0x00053ABC>
2304.053: <Unknown @ 0x000634F6>
2304.053: Chunk contents:
2304.053: 30 00 0.
.
.
.
2304.053: WARNING: ========================================================
2304.053: WARNING: End Memory Leak Dump
2304.053: WARNING: ========================================================
2304.063: === WARNING: ********************************************************************************
2304.063: === WARNING: Found 36 memory leaks for Serial Test (01.01.01). Information concerning the leaks can be found in the log file.
2304.063: === WARNING: ********************************************************************************
bschorre
 
Posts: 3
Joined: Mon May 10, 2004 10:29 am
Location: Germany

Postby jstadolnik on Tue May 11, 2004 1:37 pm

There's no way to decode leak reports just by looking at them. I would need to replicate the problem on a emulator/simulator to make any sense of this.

I'll also need to see your source code. Can you post it here or email it to me?

Also, what version of the PToolboxLib are you using (current is 7.6.2beta) and what emulator/simulator are you using?

Joe

The PToolboxLib guy.
http://www.geocities.com/retro_01775/PToolboxLib.htm
jstadolnik
 
Posts: 1741
Joined: Wed Dec 06, 2000 3:34 am
Location: USA

Postby bschorre on Wed May 12, 2004 4:38 am

Hi,

The version of PToolboxLib is: 7.4.4.

The version of Palm OS Emulator is: 3.5

Below there is my Source-Code:

======================================================================
//#############################################################################
/*!
@file serial_test.c
Project -\n
Subproject -\n
Date of creation 2004.05.06\n
@author bschorre\n
@copyright (c) 2004 mAGIC_DATa\n
All Rights Reserved.\n
\n
N O T I C E\n
THIS MATERIAL IS CONSIDERED A TRADE SECRET BY R&S.\n
UNAUTHORIZED ACCESS, USE, REPRODUCTION OR\n
DISTRIBUTION IS PROHIBITED.

@description Tests der seriellen Schnittstelle

@warning: !!! Diese Programm laeuft mit der PToolboxLib v 7.4.4 !!!

@todo: GetPTVersion() einbauen, um Version von PToolboxLib
anzufragen
*/
//#############################################################################

/*==================== Konstanten-Definition ===============================*/
@cid "BSc_";
@ver "01.01.01";
@name "Serial Test";
@dbname "Serial Test";
@licon1 "images/icon1bpp.bmp";
@sicon1 "images/smic1bpp.bmp";
/*==========================================================================*/

/*==================== Include-Dateien =====================================*/
library "PToolboxLib"
include "Fctl.h"
//include "resource.h"
#define r_MAIN_FORM 3000
#define r_BUTTON_ONLINE 3001
#define r_BUTTON_SEND_AT 3002
#define r_LABEL_MESSAGES 3003
#define r_FIELD_KOMM 3004
#define r_FIELD_NUMBER 3005
#define r_FIELD_NUMBER_KUM 3006
#define r_BUTTON_SERIAL_CON_DATA 3007
#define r_FORM_SERIAL_CON_DATA 3008
#define r_BUTTON_OK 3009
#define r_BUTTON_CANCEL 3010

#define r_MAIN_MENU 5000
#define r_MENU_BEENDEN 5001
#define r_MENU_FUNKTION 5002
#define r_MENU_INFO 5003

//include "constants.h"
#define AC_AUTHOR "mAGIC_DATa - bschorre"
#define AC_SOFTWARE_TITLE "Test"
#define AC_SOFTWARE_VERSION "01"
#define AC_SOFTWARE_VARIANT "01"
#define AC_SOFTWARE_MODIFICATION "01"
#define AC_DATE_OF_BUILD "11.02.2003"
#define AC_KONTAKT "bschorre@gmx.de"

#define TRUE 1
#define FALSE 0

// Koordinaten im Info-Form
#define I_BITMAP_X 8
#define I_BITMAP_Y 16

#define I_SW_TITLE_X 41
#define I_SW_TITLE_Y 21

#define I_AUTHOR_X 15
#define I_AUTHOR_Y 41 // Hoehe: 18

#define I_VERSION_X 15
#define I_VERSION_Y 110 // Hoehe: 12

#define I_DATE_X 15
#define I_DATE_Y 122 // Hoehe: 12

#define I_KONTAKT_X 15
#define I_KONTAKT_Y 53 // Hoehe: 24

#define I_PORT_CRADLE 0x8000
#define I_PORT_IRDA 0x8001

#define MAX_STRING_LENGTH 256
#define MAX_RINGPUFFER_LENGTH 1024
#define MAX_RINGPUFFER_LENGTH_PLUS_ONE 1025

#define AC_SERIAL_CON_DATA "Serial Config"
#define AC_OK "OK"
#define AC_CANCEL "Cancel"


//include "stddefs.h"
#define ON 1
#define OFF 0
#define _DEBUG_ OFF

//include "string.pc"
//#############################################################################
//! Wandelt LF in CR/LF um.
/*!
Diese Methode wandelt alle CR-Angaben in einem String in CR/LF-Angaben um.

@author bschorre
@date 2004.03.25
@version 00.00.01

@warning !!! Dieses Methode laeuft mit der PToolboxLib v 7.4.4 !!!

@param pointer ac_Dummy - Zeiger auf der String, in dem die
CR-Angaben vorkommen.

@return
*/
//#############################################################################
i_ChangeLF2CRLF(pointer ac_Dummy)
{
/* Definition der lokalen Variablen */
int i = 0; // Laufvariable
int j = 0; // Zaehler
char chars[MAX_STRING_LENGTH];

for (i = 0; i < strlen(*ac_Dummy); i++)
{
if ( _DEBUG_ == ON )
{
mmputs(i);
mmputs(" - ");
strtoc(*ac_Dummy, chars);
mmputs(hex(chars[i]));
mmputs(" - ");
mmputs(ac_Dummy[0]@[i]);
}

/* Wenn ein LF auftritt und das vorherige Zeichen kein CR war, dann wandeln */
if ( (ac_Dummy[0]@[i] == '\n') && (ac_Dummy[0]@[i - 1] != '\r') )
{
if ( _DEBUG_ == ON ) mmputs(" - \\r insert");
Insert ( ac_Dummy,'\r', i, 0 );
i++;
j++;
}
if ( _DEBUG_ == ON ) mmputs("\n");
}

/* Zum Schluss noch einmal "\r\n" anhaengen, wenns nicht da ist */
/* "blabla" */
if ( (ac_Dummy[0]@[i - 2] != '\r') && (ac_Dummy[0]@[i - 1] != '\n') )
Insert ( ac_Dummy, "\r\n", i, 0 );
/* "blabla\r" */
else if (ac_Dummy[0]@[i - 1] == '\r')
Insert ( ac_Dummy, "\n", i + 1, 0 );
/* "blabla\n" */
else if (ac_Dummy[0]@[i - 1] == '\n')
Insert ( ac_Dummy, "\r", i, 0 );

/* Fuer die Debugausgaben abschliessendes "\n" */
if ( _DEBUG_ == ON ) mmputs("\n");

return (j);
}


//include "serial.pc"
int i_WriteIndex = 0;
int i_ReadIndex = 0;

//#############################################################################
//!
/*!


@author bschorre
@date 2004.05.10
@version 00.00.01

@warning !!! Dieses Methode laeuft mit der PToolboxLib v 7.4.4 !!!

@param pointer c_SerialData - Zeiger auf den Ringpuffer

@return i_SerialDataBytes - Anzahl der gelesenen Daten
@return 0 - wenn keine Daten im Empfangspuffer
stehen
*/
//#############################################################################
int i_FetchSerialData(pointer c_SerialData)
{
/* Definition der lokalen Variablen */
int i_Return = 0;
int i_DataBytes = 0;
int i_FreeCount = 0;
pointer pc_SerialData;

/* Pruefen, ob Daten da sind */
if ( (i_DataBytes = serdata()) > 0 )
{
/* freien Speicherplatz im Ringpuffer ermitteln */
if ( (i_FreeCount = MAX_RINGPUFFER_LENGTH - i_WriteIndex + i_ReadIndex) > MAX_RINGPUFFER_LENGTH )
i_FreeCount = i_ReadIndex - i_WriteIndex;

/* Laesst der ReadIndex Platz fuer die neue Anzahl Daten ? */
if ( i_FreeCount > i_DataBytes )
{ /* UEBERLAUF */
/* Ist genug Platz im Ringspuffer frei? */
if ( (i_WriteIndex + i_DataBytes) > MAX_RINGPUFFER_LENGTH )
{
/* Daten einlesen und an die Position WriteIndex schreiben */
pc_SerialData = &c_SerialData[i_WriteIndex];
serrecva(pc_SerialData, MAX_RINGPUFFER_LENGTH - i_WriteIndex);
i_Return = MAX_RINGPUFFER_LENGTH - i_WriteIndex;
/* weitere Daten am Anfang des Ringpuffers abspeichern */
pc_SerialData = &c_SerialData[0];
serrecva ( pc_SerialData, i_DataBytes - (MAX_RINGPUFFER_LENGTH - i_WriteIndex) );
i_Return = i_Return + (i_DataBytes - (MAX_RINGPUFFER_LENGTH - i_WriteIndex));

/* WriteIndex neu setzen */
i_WriteIndex = (i_WriteIndex + i_DataBytes) - MAX_RINGPUFFER_LENGTH;
}
else
{ /* NORMALES EINLESEN */
/* Daten einlesen und an die Position WriteIndex schreiben */
pc_SerialData = &c_SerialData[i_WriteIndex];
serrecva ( pc_SerialData, i_DataBytes );
i_Return = i_DataBytes;

/* WriteIndex neu setzen */
i_WriteIndex = i_WriteIndex + i_DataBytes;
}
}
}

return(i_Return);
}


//#############################################################################
//!
/*!


@author bschorre
@date 2004.05.10
@version 00.00.01

@warning !!! Dieses Methode laeuft mit der PToolboxLib v 7.4.4 !!!

@param pointer c_SerialData - Zeiger auf den Ringpuffer

@return i_Return - Anzahl der Bytes (incl. abschlies-
sendes "\n"
@return -1 - wenn, keine vollstaendige Zeile vor-
handen ist
*/
//#############################################################################
int i_GetOneLineFromSerialData(pointer c_SerialData, pointer c_OneLine)
{
/* Definition der lokalen Variablen */
int i = 0;
int i_Return = -1;
int i_CrFound = 0;
int i_Count = 0;
string ac_SerialData;
pointer pc_SerialData;
string ac_OneLine;
pointer pc_OneLine;

pc_SerialData = &c_SerialData[i_ReadIndex];
pc_OneLine = &c_OneLine[0];

ac_SerialData = ctostr(pc_SerialData);
for ( i = 0; i < strlen(ac_SerialData); i++)
if ( ac_SerialData@[i] != '\r' )
i_Count++;
else
{
i_Count++;
i_CrFound = 1;
break;
}

if ( i_CrFound == 1 )
{
mmputs("i_Count: ");
mmputs(i_Count);
mmputs("\n");
mmputs("i_ReadIndex: ");
mmputs(i_ReadIndex);
mmputs("\n");

mmputs("Rueckgabe: ");
mmputs("\n");

/* Daten werden in den Rueckgabe-String kopiert */
for ( i = 0; i < i_Count; i++)
{
pc_OneLine[i] = c_SerialData[i_ReadIndex + i];
mmputs(hex(pc_OneLine[i]));
}
pc_OneLine[i] = 0;

mmputs("\n");

i_Return = i_Count;
i_ReadIndex = i_ReadIndex + i_Count;
}

return(i_Return);
}
/*==========================================================================*/

/*==================== Typen-Definition ====================================*/
/*==========================================================================*/

/*==================== externe-Definition ==================================*/
/*==========================================================================*/
/*==========================================================================*/

/*==================== Makro-Definition ====================================*/
/*==========================================================================*/

/*==================== Struktur-Definition =================================*/
/*==========================================================================*/

/*==================== Prototyping =========================================*/
/*==========================================================================*/

/*==================== Variablen Definitionen ==============================*/
/*==========================================================================*/

/*==========================================================================*/




//#############################################################################
//! Hauptfunktion
/*!

@author bschorre
@date 2004.05.06
@version 00.00.01

@param

@return
*/
//#############################################################################
main()
{
/* Definition der lokalen Variablen */
int e,i,pos;
int c_input;
int b_online = FALSE;
string text = "AT\r\n";
string ac_Dummy;

int i_SerialDataBytes = 0;
int i_SerialDataBytesKum = 0;
char c_SerialData[MAX_RINGPUFFER_LENGTH_PLUS_ONE];
string ac_SerialData;
pointer pc_SerialData;

string ac_SerialDataAll;

char c_OneLine[MAX_RINGPUFFER_LENGTH_PLUS_ONE];
string ac_OneLine;
pointer pc_OneLine;

string text1;
char chars[MAX_STRING_LENGTH];
pointer ptr;


if(mmfind("Serial Test") != 0)
{
mmdelete();
}
mmnew();
mmputs("Serial Test\n");
clear();
Form(r_FORM_SERIAL_CON_DATA, AC_SERIAL_CON_DATA);
pos = Button(r_BUTTON_OK, 0x000, 10, 140, 0, 0, AC_OK);
pos = Button(r_BUTTON_CANCEL,0x000, 110, 140, 0, 0, AC_CANCEL);

Form(r_MAIN_FORM,"Serial Test");
Fctl(SETMENU,r_MAIN_MENU);
Field(r_FIELD_KOMM,0x0,80,50,80,110,MAX_STRING_LENGTH,"ID");
Field(r_FIELD_NUMBER,0x01,80,40,20,5,4,"0");
Field(r_FIELD_NUMBER_KUM,0x01,105,40,20,5,4,"0");
/* Push-Button erzeugen */
pos = Button(r_BUTTON_SEND_AT,0x000,10,120,0,0,"SEND");
pos = Button(r_BUTTON_ONLINE,0x001,10,140,0,0,"ONLINE");
pos = Button(r_BUTTON_SERIAL_CON_DATA, 0x0000,10, 30, 0, 0, AC_SERIAL_CON_DATA);

/* zeichne Objekte */
Fctl(DRAW,r_FORM_SERIAL_CON_DATA);
Fctl(DRAW,r_MAIN_FORM);

FsetText(r_FIELD_KOMM,"Text");

c_SerialData[MAX_RINGPUFFER_LENGTH_PLUS_ONE] = 0;


Fctl(HOOKSILK, 1);

while(1)
{
e=Fevent(5);
switch(e)
{
case r_BUTTON_ONLINE:
if ( b_online == FALSE )
{
mmputs(date(0));
mmputs(time(0));
mmputs(ticks());
mmputs(" ONLINE\n");
if ( seropen(38400, "8N1N", 100) == 0 )
b_online = TRUE;
}
else
{
mmputs("\n");
mmputs(date(0));
mmputs(time(0));
mmputs(ticks());
mmputs(" OFFLINE\n");
serclose();
pc_SerialData = &c_SerialData[0];
ac_SerialData = ctostr(pc_SerialData);
for ( i = 0; i < strlen(ac_SerialData); i++)
{
if ( ac_SerialData@[i] == '\r' )
{
Insert(&ac_SerialData, "\n", i, 1);
}
}
mmputs("\n");
// mmputs(ac_SerialData);
b_online = FALSE;
}
break;

case r_BUTTON_SEND_AT:
if ( b_online == TRUE )
{
/* Umwandeln der Zeichen "\n" in "\r\n" */
ac_Dummy = FgetText(r_FIELD_KOMM);
i = i_ChangeLF2CRLF(&ac_Dummy);

if ( _DEBUG_ == ON )
{
mmputs(ac_Dummy);
mmputs("\n");
mmputs(i);
mmputs("\n");
}

strtoc(ac_Dummy, chars);
ptr = chars;
sersenda(ptr, MAX_STRING_LENGTH);
}
else
{
if ( _DEBUG_ == ON )
{
mmputs(seconds());
mmputs(" DIDN'T SEND AT -> not online\n");
}
}
break;

case r_BUTTON_SERIAL_CON_DATA:
Fctl(DRAW, r_FORM_SERIAL_CON_DATA);
break;

case r_BUTTON_OK:
/*
ToDo: beim Druecken von Button-Cancel muessen die urspruenglichen Werte wieder hergestellt werden!
*/
case r_BUTTON_CANCEL:
Fctl(DRAW, r_MAIN_FORM);
break;

case r_MENU_BEENDEN:
if ( b_online == TRUE)
serclose();
mmputs("\n");
mmputs("OFFLINE\n");
mmputs("ENDE\n");
exit();

case 12:
Fctl(FREE, r_FORM_SERIAL_CON_DATA);
exit();
}

i_SerialDataBytes = i_FetchSerialData(&c_SerialData);
/* Anzeige der eingelesenen Bytes */
FsetText(r_FIELD_NUMBER, i_SerialDataBytes);
i_SerialDataBytesKum = i_SerialDataBytesKum + i_SerialDataBytes;
FsetText(r_FIELD_NUMBER_KUM, i_SerialDataBytesKum);

if ( i_GetOneLineFromSerialData(&c_SerialData, &c_OneLine) > 0 )
{
mmputs("MAIN\n");
pc_OneLine = &c_OneLine[0];
ac_OneLine = ctostr(pc_OneLine);
FsetText(r_FIELD_KOMM, ac_OneLine);
mmputs(ac_OneLine);
mmputs("\n");
}
}
}

//#############################################################################
// End of File
//#############################################################################
======================================================================

Bjoern
bschorre
 
Posts: 3
Joined: Mon May 10, 2004 10:29 am
Location: Germany

Postby jstadolnik on Wed May 12, 2004 11:15 am

There have been many bugfixes since version 7.4.4. Try using v7.6.2beta and see if the problem goes away. It should, as I haven't had reports of memory leaks in quite some time.

http://www.geocities.com/retro_01775/PT ... _beta.html

Regards,

Joe

The PToolboxLib guy.
http://www.geocities.com/retro_01775/PToolboxLib.htm
jstadolnik
 
Posts: 1741
Joined: Wed Dec 06, 2000 3:34 am
Location: USA

Postby bschorre on Wed May 12, 2004 5:51 pm

Hi Joseph,

Thanks for youzr Infos.

With Vesion 7.6.1 it works fine.


Bjoern
bschorre
 
Posts: 3
Joined: Mon May 10, 2004 10:29 am
Location: Germany


Return to Pocket Toolbox

Who is online

Users browsing this forum: No registered users and 3 guests

cron