Toon posts:

[Linux C syscalls] Probleem met semaphoren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een volgend stuk code (beetje onrelevante dingen zoals logging enzo verwijderd):

code:
1
2
3
4
5
6
7
8
9
int semid = -1, rtcode = -1;
union semun {
     int             val;
     struct semid_ds *buf;
     unsigned short  *array;
} arg ;

semid = semget(IPC_PRIVATE, 1, 0666);
rtcode = semctl(semid, 0, SETVAL, arg);


Nu 'semid' word degelijk gezet en kan terug gevonden worden met 'ipcs'
De return code van semctl daarentegen is steeds -1 en errno staat steeds op EIDRM
Nochtans zelfs na de exit van het programma na die bepaalde regel vind ik de semaphore terug met ipcs

Weet iemand waaraan dit zou kunnen liggen ??

Het systeem is Debian Testing met kernel 2.6.12.6 en gcc 4.0.2

========================================

Oke, blijkbaar lag dit probleem aan de system librariers. Een 'apt-get dist-upgrade' later en deze code wel werkt. (Hier kan dus een slotje op)

[ Voor 14% gewijzigd door Verwijderd op 06-01-2006 16:42 ]


  • irondog
  • Registratie: Januari 2001
  • Laatst online: 11-05-2025

irondog

alle dingen moeten onzin zijn

Let er wel even op dat je niet oneindig veel semaphoren kunt gebruiken en dat deze dus opgeruimd moeten worden (liefst in je eigen code).
Ze blijven na executie gewoon bestaan en op een gegeven moment (na uren proggen) zit je dus zonder vrije semaphoren!

Extern de rotzooi opruimen kan met ipcrm -s <id>
Maar ik zou het netjes in C doen.
Oke, blijkbaar lag dit probleem aan de system librariers. Een 'apt-get dist-upgrade' later en deze code wel werkt. (Hier kan dus een slotje op)
Ik denk eerder dat een rebootje je probleem gefixed heeft :)

[ Voor 40% gewijzigd door irondog op 06-01-2006 17:22 ]

[P5B deluxe] [Core2Duo 6300] [2 X 1GB DDR2] [GF FX7300] [320 GB WD] [Gentoo] [VISTA]