[Bug 489497] Re: timer_delete does not cancel the thread to run the function

Angelo Borsotti angelo.borsotti at gmail.com
Sun May 16 18:53:49 UTC 2010


apport information

** Tags added: apport-collected

** Description changed:

  timer_create(), when told to run a function at time expiration, creates immediately an ancillary thread
  (it could have created it when armed, or even better, when expired). When the timer is deleted, the
  ancillary thread does not get cancelled. Not even if it was created as detached. That ancillary thread
  must instead be terminated, otherwise it wastes resources (and prevents the process to terminate
  normally).
  Program that shows it:
  
  #include <stdlib.h>
  #include <stdio.h>
  #include <time.h>
  #include <signal.h>
  #include <unistd.h>
  #include <dirent.h>
  #include <stddef.h>
  
  // enumerate all threads of this process
  static void listthreads(char* str){
      printf("threads %s\n",str);
      char buf[100];
      sprintf(buf,"/proc/%d/task",getpid());
      DIR* dir = opendir(buf);
      int len = offsetof(struct dirent,d_name) +
          pathconf(buf,_PC_NAME_MAX) + 1;
      struct dirent* entryp;
      entryp = malloc(len);
      struct dirent* res;
      for (;;){
          readdir_r(dir,entryp,&res);
          if (res == NULL) break;
          if (entryp->d_name[0] == '.') continue;
          printf("    %s\n",entryp->d_name);
      }
      closedir(dir);
      printf("end of list\n");
  }
  
  void timerfunction(sigval_t sigval){
  }
  
  int main(int argc, char* argv[]){
      printf("main %d\n",getpid());
      struct sigevent event;
      event.sigev_notify = SIGEV_THREAD;
      event.sigev_notify_function = timerfunction;
      event.sigev_notify_attributes = NULL;
      event.sigev_value.sival_ptr = (void*)pthread_self();
      timer_t timer_id;
      if (timer_create(CLOCK_REALTIME,&event,&timer_id) < 0){
          perror("timer create");
      }
      listthreads("after timer creation");
      struct itimerspec itime;                     // arm timer
      itime.it_value.tv_sec = 10;
      itime.it_value.tv_nsec = 0;
      itime.it_interval.tv_sec = 0;
      itime.it_interval.tv_nsec = 0; 
      if (timer_settime(timer_id,0,&itime,NULL) < 0){
          perror("timer settime");
      }
      listthreads("after timer arming");
  
      timer_delete(timer_id);                      // disarm and delete timer
      listthreads("after timer delete");
  }
  
  $ gcc timerdelete.c -lrt
  $ ./a.out
  main 9958
  threads after timer creation
      9958
      9959
  end of list
  threads after timer arming
      9958
      9959
  end of list
  threads after timer delete
      9958
      9959
  end of list
  
  ProblemType: Bug
  Architecture: i386
  AudioDevicesInUse:
   USER        PID ACCESS COMMAND
   /dev/snd/controlC0:  angelo     1643 F.... pulseaudio
  CRDA: Error: [Errno 2] No such file or directory
  Card0.Amixer.info:
   Card hw:0 'NVidia'/'HDA NVidia at 0xfe028000 irq 23'
     Mixer name	: 'Realtek ALC888'
     Components	: 'HDA:10ec0888,1631e601,00100001'
     Controls      : 37
     Simple ctrls  : 21
  Date: Sat Nov 28 10:24:21 2009
  DistroRelease: Ubuntu 9.10
  HibernationDevice: RESUME=UUID=335bd2d5-504f-4410-a53a-96814ee336e8
  InstallationMedia: Ubuntu 9.10 "Karmic Koala" - Release i386 (20091028.5)
  Lsusb:
   Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
   Bus 002 Device 002: ID 046d:c315 Logitech, Inc. Classic New Touch Keyboard
   Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
  MachineType: Packard Bell BV IMEDIA 8425
  NonfreeKernelModules: nvidia
  Package: linux-image-2.6.31-15-generic 2.6.31-15.50
  ProcCmdLine: BOOT_IMAGE=/boot/vmlinuz-2.6.31-15-generic root=UUID=4643cae4-fc87-4dec-a73c-04ce2ccfc02a ro quiet splash
  ProcEnviron:
   LANG=en_US.UTF-8
   SHELL=/bin/bash
  ProcVersionSignature: Ubuntu 2.6.31-15.50-generic
  RelatedPackageVersions:
   linux-backports-modules-2.6.31-15-generic N/A
   linux-firmware 1.25
  RfKill:
   0: phy0: Wireless LAN
   	Soft blocked: no
   	Hard blocked: no
  SourcePackage: linux
  Uname: Linux 2.6.31-15-generic i686
  dmi.bios.date: 11/01/2006
  dmi.bios.vendor: Phoenix Technologies, LTD
  dmi.bios.version: M2N-NM 0401
  dmi.board.name: M2N-NM
  dmi.board.vendor: Packard Bell BV
  dmi.board.version: 1.XX
  dmi.chassis.asset.tag: 123456789000
  dmi.chassis.type: 3
  dmi.chassis.vendor: Packard Bell BV
  dmi.chassis.version: Chassis Version
  dmi.modalias: dmi:bvnPhoenixTechnologies,LTD:bvrM2N-NM0401:bd11/01/2006:svnPackardBellBV:pnIMEDIA8425:pvrPB80107506:rvnPackardBellBV:rnM2N-NM:rvr1.XX:cvnPackardBellBV:ct3:cvrChassisVersion:
  dmi.product.name: IMEDIA 8425
  dmi.product.version: PB80107506
  dmi.sys.vendor: Packard Bell BV
+ --- 
+ AlsaVersion: Advanced Linux Sound Architecture Driver Version 1.0.21.
+ Architecture: i386
+ AudioDevicesInUse:
+  USER        PID ACCESS COMMAND
+  /dev/snd/controlC0:  angelo     1356 F.... pulseaudio
+ CRDA: Error: [Errno 2] No such file or directory
+ Card0.Amixer.info:
+  Card hw:0 'NVidia'/'HDA NVidia at 0xfe028000 irq 23'
+    Mixer name	: 'Realtek ALC888'
+    Components	: 'HDA:10ec0888,1631e601,00100001'
+    Controls      : 37
+    Simple ctrls  : 21
+ DistroRelease: Ubuntu 10.04
+ HibernationDevice: RESUME=UUID=335bd2d5-504f-4410-a53a-96814ee336e8
+ InstallationMedia: Ubuntu 10.04 LTS "Lucid Lynx" - Release i386 (20100429)
+ Lsusb:
+  Bus 002 Device 002: ID 046d:c315 Logitech, Inc. Classic New Touch Keyboard
+  Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
+  Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
+ MachineType: Packard Bell BV IMEDIA 8425
+ NonfreeKernelModules: nvidia
+ Package: linux (not installed)
+ ProcCmdLine: BOOT_IMAGE=/boot/vmlinuz-2.6.32-22-generic root=UUID=2258e664-9423-4566-ae33-52c12a4645ec ro quiet splash
+ ProcEnviron:
+  LANG=en_US.utf8
+  SHELL=/bin/bash
+ ProcVersionSignature: Ubuntu 2.6.32-22.33-generic 2.6.32.11+drm33.2
+ Regression: No
+ RelatedPackageVersions: linux-firmware 1.34
+ Reproducible: Yes
+ RfKill:
+  0: phy0: Wireless LAN
+  	Soft blocked: no
+  	Hard blocked: no
+ Tags: lucid  needs-upstream-testing
+ Uname: Linux 2.6.32-22-generic i686
+ UserGroups: adm admin cdrom dialout lpadmin plugdev sambashare
+ dmi.bios.date: 11/01/2006
+ dmi.bios.vendor: Phoenix Technologies, LTD
+ dmi.bios.version: M2N-NM 0401
+ dmi.board.name: M2N-NM
+ dmi.board.vendor: Packard Bell BV
+ dmi.board.version: 1.XX
+ dmi.chassis.asset.tag: 123456789000
+ dmi.chassis.type: 3
+ dmi.chassis.vendor: Packard Bell BV
+ dmi.chassis.version: Chassis Version
+ dmi.modalias: dmi:bvnPhoenixTechnologies,LTD:bvrM2N-NM0401:bd11/01/2006:svnPackardBellBV:pnIMEDIA8425:pvrPB80107506:rvnPackardBellBV:rnM2N-NM:rvr1.XX:cvnPackardBellBV:ct3:cvrChassisVersion:
+ dmi.product.name: IMEDIA 8425
+ dmi.product.version: PB80107506
+ dmi.sys.vendor: Packard Bell BV

** Attachment added: "AlsaDevices.txt"
   http://launchpadlibrarian.net/48567206/AlsaDevices.txt

-- 
timer_delete does not cancel the thread to run the function
https://bugs.launchpad.net/bugs/489497
You received this bug notification because you are a member of Kernel
Bugs, which is subscribed to linux in ubuntu.




More information about the kernel-bugs mailing list