Article 4WRW2 Seg Fault/Core Dump timer_settime()/timer_create

Seg Fault/Core Dump timer_settime()/timer_create

by
Benlilo
from LinuxQuestions.org on (#4WRW2)
Hi, My first post. When I create a timer to use a SIGEV_THREAD and a notify function, the program crashes when timer_settime() is called. A remote gdb debug on my board shows that when pthread_create is called, the value of the notify function is NULL, Yet I don't see where I made an error. Help would be greatly appreciated.

// udpTimer below is a Class A attribute of type timer_t.

void ClassA::StaticTimeHandler(union sigval timer_data)
{
//do something
}

BOOL ClassA::createUdpTimerHandler( void)
{
BOOL retVal = false;
try
{
struct sigevent sev;
std::memset(&sev, 0 , sizeof(struct sigevent));
sev.sigev_notify = SIGEV_THREAD;
sev._sigev_notify_function = StaticTimeHandler;
sev._sigev_notify_attributes = NULL;

if(m_pTimerPtr->timer_create(CLOCK_REALTIME, &sev, &udpTimer) == false)
{
//do something if error occurs
}

retVal = true;
}
catch(ACE_Exception& e)
{
e.SendException();
}
return(retVal);
}

In a previously created thread
void * Class A::UdpSocketHandler(void* args)
{

if(createUdpTimerHandler() == false)
{
//do something
}

struct itimerspec timer_period;
timer_period.it_value.tv_sec = 5;
timer_period.it_value.tv_nsec = 0;
timer_period.it_interval.tv_sec = 5;
timer_period.it_interval.tv_nsec = 0;

if (m_pSockPtr->ACE_socket(AF_INET, SOCK_DGRAM, 0, UdpSockDesc) == false)
{
//do something
}
memset(&server, 0, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(51000);
server.sin_addr.s_addr = inet_addr(MyADDR);

if (m_pSockPtr->bind(UdpSockDesc, (struct sockaddr *) &server, sizeof(server))
== false)
{
//do something
}
clientlen = sizeof(udpclientaddr);

if(m_pTimerPtr->timer_settime(udpTimer, 0, &timer_period, NULL) == false)
{
std::cout << "set timer failed \n" << std::endl;
}

while(m_quit == false)
{
recvSockBytes = 0;
// memset(&udpBuf[udpIndex].rxMsg[0], '/0', sizeof(rxMessage) );
memset(&udpBuf, '/0', sizeof(rxMessage) );

if (m_pSockPtr->recvfrom(UdpSockDesc, (void *) &udpBuf, socklen, 0, (sockaddr *) &udpclientaddr, &clientlen, errNum, recvSockBytes))
{

if (recvSockBytes > 0)
{
m_pTimerPtr->ACE_timer_settime(udpTimer, 0,
&timer_period, NULL);
...

After ~30 seconds with no received UDP messages the program Seg Faults.

What do I have wrong here? The notify function is never called, clearly. I do not get an error returned by any of the functions above.latest?d=yIl2AUoC8zA latest?i=y6ZKp4KS4fU:ZYjNlve_g_s:F7zBnMy latest?i=y6ZKp4KS4fU:ZYjNlve_g_s:V_sGLiP latest?d=qj6IDK7rITs latest?i=y6ZKp4KS4fU:ZYjNlve_g_s:gIN9vFwy6ZKp4KS4fU
External Content
Source RSS or Atom Feed
Feed Location https://feeds.feedburner.com/linuxquestions/latest
Feed Title LinuxQuestions.org
Feed Link https://www.linuxquestions.org/questions/
Reply 0 comments