Coder Social home page Coder Social logo

lcm-proj / lcm Goto Github PK

View Code? Open in Web Editor NEW
929.0 929.0 382.0 9.21 MB

Lightweight Communications and Marshalling

License: GNU Lesser General Public License v2.1

C 16.97% Shell 0.14% C++ 27.97% C# 1.71% Java 48.01% Lua 0.26% Python 0.62% CSS 0.21% HTML 0.83% M4 0.11% CMake 2.46% Roff 0.42% Go 0.30%

lcm's People

Contributors

abachrach avatar andybarry avatar ashuang avatar bluesquall avatar cho-m avatar donkahlero avatar drmoose avatar ericcousineau-tri avatar gustafj avatar hoxell avatar ihilt avatar j-rivero avatar jbendes avatar judfs avatar jwnimmer-tri avatar kyonifer avatar m-chaturvedi avatar matt-donahoe-skydio avatar mcamurri avatar mrpelotazo avatar mspiegel avatar mwoehlke-kitware avatar nosracd avatar patmarion avatar sammy-tri avatar severinstrobl avatar tbeu avatar tderensis avatar tprk77 avatar wxmerkt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lcm's Issues

lcm-logplayer-gui ignores filter command line option when .jlp file exists

When passing a filter argument (-f) to lcm-logplayer-gui, the argument is ignored if a .jlp file exists. The file is specifying which channels should be active, but the command line argument is as well. I think that the command line argument should take precedence, since it's more likely that the user will be setting it on purpose.

python 3.x import fails

The LCM module fails to import in Python 3.x due to a missing define in pylcm.c:

Python 3.4.1 (default, Nov 3 2014, 14:38:10)
[GCC 4.9.1 20140930 (Red Hat 4.9.1-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.

import lcm
Traceback (most recent call last):
File "", line 1, in
File "~/.local/lib64/python3.4/site-packages/lcm/init.py", line 3, in
from ._lcm import LCM, LCMSubscription
ImportError: ~/.local/lib64/python3.4/site-packages/lcm/_lcm.so: undefined symbol: PyInt_AsLong

Following change in pylcm.c works for me:

if PY_MAJOR_VERSION >= 3

#define PyInt_FromLong PyLong_FromLong
**#define PyInt_AsLong PyLong_AsLong**

endif

Add overload to c++ lcm::Publish() that takes a const reference

A very common pattern that is to have classes define a method that will return the state of the class in an lcm msg publishing over LCM.

class Foo {
  foo_t GetLcmtype();
};

where foo_t is the lcmtype for class Foo.

With the current bindings, the following results in an error, because we're trying to take the address of a temporary.

lcm->publish(channel, &foo.GetLcmtype());

Instead you have to create a local variable and then pass in a pointer to the local variable which is useless boiler plate.

foo_t foo_msg = foo.GetLcmtype();
lcm->publish(channel, &foo_msg);

If publish took a const reference argument, the following would be valid code:

lcm->publish(channel, foo.GetLcmtype());

lcm::Publish() probably should have taken a const reference to begin with, but I don't think its worth breaking backwards compatibility hence the overload.

file:// protocol not understood on windows?

I am getting the message:

LCM: Unknown URL protocol: file

when using the DotNet LCM (1.3.0) under windows 7.

UDP messages work fine. new LCM.LCM.LCM();
What did I do wrong here:

            String lcmFilePath = "file:///G:/Data/LCM-Files/lcmlog-2015-11-19.01.lcm?speed=0";
            LCM.LCM.LCM myLCM = new LCM.LCM.LCM(lcmFilePath);

Does lcmCreate() with file not work under windows?
lcm_t* lcm_create(const char * provider)

see: https://lcm-proj.github.io/group__LcmC__lcm__t.html#gaf29963ef43edadf45296d5ad82c18d4b

java.lang.NoClassDefFoundError

I'm getting the following java.lang.NoClassDefFoundError[s] when I run lcm-spy with a custom plugin. How can I fix these?

Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release
ClassDiscoverer: java.lang.NoClassDefFoundError: apple/laf/AquaPopupMenuUI
jar: /usr/local/share/java/lcm.jar
class: com/jidesoft/plaf/aqua/AquaJidePopupMenuUI.class
ClassDiscoverer: java.lang.NoClassDefFoundError: org/apache/commons/io/output/ByteArrayOutputStream
jar: /usr/local/share/java/lcm.jar
class: org/apache/xmlgraphics/xmp/XMPPacketParser.class
ClassDiscoverer: java.lang.NoClassDefFoundError: org/apache/commons/io/output/ByteArrayOutputStream
jar: /usr/local/share/java/lcm.jar
class: org/apache/xmlgraphics/image/loader/impl/ImageConverterRendered2PNG.class
ClassDiscoverer: java.lang.NoClassDefFoundError: apple/laf/AquaPopupMenuUI
jar: /usr/local/share/java/lcm.jar
class: com/jidesoft/plaf/aqua/AquaJidePopupMenuUI.class
ClassDiscoverer: java.lang.NoClassDefFoundError: org/apache/commons/io/output/ByteArrayOutputStream
jar: /usr/local/share/java/lcm.jar
class: org/apache/xmlgraphics/xmp/XMPPacketParser.class
ClassDiscoverer: java.lang.NoClassDefFoundError: org/apache/commons/io/output/ByteArrayOutputStream
jar: /usr/local/share/java/lcm.jar
class: org/apache/xmlgraphics/image/loader/impl/ImageConverterRendered2PNG.class
Found 4 LCM types
LCM: Disabling IPV6 support
LCM: TTL set to 1.
ClassDiscoverer: java.lang.NoClassDefFoundError: apple/laf/AquaPopupMenuUI
jar: /usr/local/share/java/lcm.jar
class: com/jidesoft/plaf/aqua/AquaJidePopupMenuUI.class
ClassDiscoverer: java.lang.NoClassDefFoundError: apple/laf/AquaPopupMenuUI
jar: /usr/local/share/java/lcm.jar
class: com/jidesoft/plaf/aqua/AquaJidePopupMenuUI.class

python EventLog.seek function does not work on large files

I found that the log seek functionality only works on LCM file sizes up to ~2GB. If the file is larger than this seek() fails for some reason. It wasn't immediately clear why this is occurring by looking at the code. I am using a 32-bit Linux system, it may have something to do with this.

log.seek((1<<31)-1)
print log.tell()
2147483647L
log.seek((1<<31))
print log.tell()
2147483647L

LCM on C# fails over ethernet

We have been using LCM in C# with Unity. When running over wireless it works fine, over Ethernet connections it fails to receive or broadcast.

Missing header unistd.h in emit_cpp.c

  CC     emit_cpp.o
emit_cpp.c: In function ‘emit_header_start’:
emit_cpp.c:306:19: warning: implicit declaration of function ‘_exit’ [-Wimplicit-function-declaration]
                   _exit(1);
                   ^
emit_cpp.c:306:19: warning: incompatible implicit declaration of built-in function ‘_exit’ [enabled by default]

LogPlayer GUI not publishing messages

I am having a strange error where lcm-logplayer-gui seems to be ignoring messages from a log file I generated programatically. I created a log file by merging two different logs. I made sure the log timestamps are monotonically increasing when writing to the file. I am assuming the event number is populated correctly by the log write, this seems to be the case.

I am able to see the log events when I use a lcm.EventLog to read my merged file. Also lcm-logplayer seems to work strangely enough. Any ideas why lcm-logplayer-gui would not publish certain messages?

lcm-dotnet Close() not working

Hi, I encountered this issue that when invoke LCM.Close(), the function halts forever. I think similar issue was brought up in lcm-java and it was fixed in the java version. Yet in the dotnet version it still exists. Since dotnet thread doesn't have similar isInterrupted() functionality, I made following changes and it seemed work. I attached the patch here. Hope it might help :)

Deprecated mutex API

Newer glib/gthread versions lead to 132 -Wdeprecated-declarations warnings on the mutex API.

admin@arm:~/lcm$ make -C lcm CFLAGS="-fPIC"
make: Entering directory `/home/admin/lcm/lcm'
  CC       lcm.lo
lcm.c: In function 'lcm_create':
lcm.c:61:5: warning: 'g_thread_init' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:261) [-Wdeprecated-declarations]
     if (!g_thread_supported ()) g_thread_init (NULL);
     ^
lcm.c:126:5: warning: 'g_static_rec_mutex_init' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:172): Use 'g_rec_mutex_init' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_init (&lcm->mutex);
     ^
lcm.c:127:5: warning: 'g_static_rec_mutex_init' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:172): Use 'g_rec_mutex_init' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_init (&lcm->handle_mutex);
     ^
lcm.c: In function 'lcm_destroy':
lcm.c:201:5: warning: 'g_static_rec_mutex_free' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:191): Use 'g_rec_mutex_free' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_free (&lcm->mutex);
     ^
lcm.c: In function 'lcm_handle':
lcm.c:213:9: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
         g_static_rec_mutex_lock (&lcm->handle_mutex);
         ^
lcm.c:218:9: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
         g_static_rec_mutex_unlock (&lcm->handle_mutex);
         ^
lcm.c: In function 'lcm_subscribe':
lcm.c:334:5: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_lock (&lcm->mutex);
     ^
lcm.c:337:5: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_unlock (&lcm->mutex);
     ^
lcm.c: In function 'lcm_unsubscribe':
lcm.c:345:5: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_lock (&lcm->mutex);
     ^
lcm.c:363:5: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_unlock (&lcm->mutex);
     ^
lcm.c: In function 'lcm_get_handlers':
lcm.c:373:5: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_lock (&lcm->mutex);
     ^
lcm.c:392:5: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_unlock (&lcm->mutex);
     ^
lcm.c: In function 'lcm_try_enqueue_message':
lcm.c:399:5: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_lock (&lcm->mutex);
     ^
lcm.c:410:5: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_unlock (&lcm->mutex);
     ^
lcm.c: In function 'lcm_has_handlers':
lcm.c:418:5: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_lock (&lcm->mutex);
     ^
lcm.c:422:5: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_unlock (&lcm->mutex);
     ^
lcm.c: In function 'lcm_dispatch_handlers':
lcm.c:429:5: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_lock (&lcm->mutex);
     ^
lcm.c:449:13: warning: 'g_static_rec_mutex_unlock_full' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:188) [-Wdeprecated-declarations]
             int depth = g_static_rec_mutex_unlock_full (&lcm->mutex);
             ^
lcm.c:451:13: warning: 'g_static_rec_mutex_lock_full' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:184) [-Wdeprecated-declarations]
             g_static_rec_mutex_lock_full (&lcm->mutex, depth);
             ^
lcm.c:471:5: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_unlock (&lcm->mutex);
     ^
lcm.c: In function 'lcm_subscription_set_queue_capacity':
lcm.c:526:5: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_lock(&subs->lcm->mutex);
     ^
lcm.c:528:5: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_unlock(&subs->lcm->mutex);
     ^
  CC       lcm_udpm.lo
lcm_udpm.c: In function 'lcm_udpm_destroy':
lcm_udpm.c:178:5: warning: 'g_static_rec_mutex_free' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:191): Use 'g_rec_mutex_free' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_free (&lcm->mutex);
     ^
lcm_udpm.c:179:5: warning: 'g_static_mutex_free' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:148): Use 'g_mutex_clear' instead [-Wdeprecated-declarations]
     g_static_mutex_free (&lcm->transmit_lock);
     ^
lcm_udpm.c:181:9: warning: 'g_mutex_free' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:275) [-Wdeprecated-declarations]
         g_mutex_free(lcm->create_read_thread_mutex);
         ^
lcm_udpm.c:182:9: warning: 'g_cond_free' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:279) [-Wdeprecated-declarations]
         g_cond_free(lcm->create_read_thread_cond);
         ^
lcm_udpm.c: In function '_recv_message_fragment':
lcm_udpm.c:341:9: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
         g_static_rec_mutex_lock (&lcm->mutex);
         ^
lcm_udpm.c:343:9: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
         g_static_rec_mutex_unlock (&lcm->mutex);
         ^
lcm_udpm.c: In function 'udp_read_packet':
lcm_udpm.c:470:13: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
             g_static_rec_mutex_lock (&lcm->mutex);
             ^
lcm_udpm.c:472:13: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
             g_static_rec_mutex_unlock (&lcm->mutex);
             ^
lcm_udpm.c:545:9: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
         g_static_rec_mutex_lock (&lcm->mutex);
         ^
lcm_udpm.c:547:9: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
         g_static_rec_mutex_unlock (&lcm->mutex);
         ^
lcm_udpm.c: In function 'recv_thread':
lcm_udpm.c:576:9: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
         g_static_rec_mutex_lock (&lcm->mutex);
         ^
lcm_udpm.c:585:9: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
         g_static_rec_mutex_unlock (&lcm->mutex);
         ^
lcm_udpm.c: In function 'lcm_udpm_publish':
lcm_udpm.c:621:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_lock (&lcm->transmit_lock);
         ^
lcm_udpm.c:652:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock (&lcm->transmit_lock);
         ^
lcm_udpm.c:671:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_lock (&lcm->transmit_lock);
         ^
lcm_udpm.c:741:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock (&lcm->transmit_lock);
         ^
lcm_udpm.c: In function 'lcm_udpm_handle':
lcm_udpm.c:768:5: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_lock (&lcm->mutex);
     ^
lcm_udpm.c:774:9: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
         g_static_rec_mutex_unlock (&lcm->mutex);
         ^
lcm_udpm.c:783:5: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_unlock (&lcm->mutex);
     ^
lcm_udpm.c:800:5: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_lock (&lcm->mutex);
     ^
lcm_udpm.c:803:5: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_unlock (&lcm->mutex);
     ^
lcm_udpm.c: In function '_setup_recv_parts':
lcm_udpm.c:876:5: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_lock(&lcm->mutex);
     ^
lcm_udpm.c:884:9: warning: 'g_static_private_get' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:247): Use 'g_private_get' instead [-Wdeprecated-declarations]
         if(g_static_private_get(&CREATE_READ_THREAD_PKEY)) {
         ^
lcm_udpm.c:885:13: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
             g_static_rec_mutex_unlock(&lcm->mutex);
             ^
lcm_udpm.c:891:9: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
         g_static_rec_mutex_unlock(&lcm->mutex);
         ^
lcm_udpm.c:898:9: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
         g_static_rec_mutex_lock(&lcm->mutex);
         ^
lcm_udpm.c:903:9: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
         g_static_rec_mutex_unlock(&lcm->mutex);
         ^
lcm_udpm.c:906:9: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
         g_static_rec_mutex_unlock(&lcm->mutex);
         ^
lcm_udpm.c:912:5: warning: 'g_mutex_new' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:273) [-Wdeprecated-declarations]
     lcm->create_read_thread_mutex = g_mutex_new();
     ^
lcm_udpm.c:913:5: warning: 'g_cond_new' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:277) [-Wdeprecated-declarations]
     lcm->create_read_thread_cond = g_cond_new();
     ^
lcm_udpm.c:915:5: warning: 'g_static_private_set' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:250): Use 'g_private_set' instead [-Wdeprecated-declarations]
     g_static_private_set(&CREATE_READ_THREAD_PKEY, GINT_TO_POINTER(1), NULL);
     ^
lcm_udpm.c:1046:5: warning: 'g_thread_create' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:100): Use 'g_thread_new' instead [-Wdeprecated-declarations]
     lcm->read_thread = g_thread_create (recv_thread, lcm, TRUE, NULL);
     ^
lcm_udpm.c:1052:5: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_unlock(&lcm->mutex);
     ^
lcm_udpm.c:1057:5: warning: 'g_static_rec_mutex_lock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:175): Use 'g_rec_mutex_lock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_lock(&lcm->mutex);
     ^
lcm_udpm.c:1073:5: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_unlock(&lcm->mutex);
     ^
lcm_udpm.c:1079:5: warning: 'g_static_rec_mutex_unlock' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:181): Use 'g_rec_mutex_unlock' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_unlock(&lcm->mutex);
     ^
lcm_udpm.c: In function 'lcm_udpm_create':
lcm_udpm.c:1122:5: warning: 'g_static_rec_mutex_init' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:172): Use 'g_rec_mutex_init' instead [-Wdeprecated-declarations]
     g_static_rec_mutex_init (&lcm->mutex);
     ^
lcm_udpm.c:1123:5: warning: 'g_static_mutex_init' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:146): Use 'g_mutex_init' instead [-Wdeprecated-declarations]
     g_static_mutex_init (&lcm->transmit_lock);
     ^
  CC       lcm_file.lo
lcm_file.c: In function 'lcm_logprov_create':
lcm_file.c:230:9: warning: 'g_thread_create' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:100): Use 'g_thread_new' instead [-Wdeprecated-declarations]
         lr->timer_thread = g_thread_create (timer_thread, lr, TRUE, NULL);
         ^
  CC       lcm_memq.lo
lcm_memq.c: In function 'lcm_memq_destroy':
lcm_memq.c:61:5: warning: 'g_mutex_free' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:275) [-Wdeprecated-declarations]
     g_mutex_free(self->mutex);
     ^
lcm_memq.c: In function 'lcm_memq_create':
lcm_memq.c:80:5: warning: 'g_mutex_new' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:273) [-Wdeprecated-declarations]
     self->mutex = g_mutex_new();
     ^
  CC       lcm_mpudpm.lo
lcm_mpudpm.c: In function 'lcm_mpudpm_destroy':
lcm_mpudpm.c:297:5: warning: 'g_static_mutex_free' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:148): Use 'g_mutex_clear' instead [-Wdeprecated-declarations]
     g_static_mutex_free (&lcm->receive_lock);
     ^
lcm_mpudpm.c:298:5: warning: 'g_static_mutex_free' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:148): Use 'g_mutex_clear' instead [-Wdeprecated-declarations]
     g_static_mutex_free (&lcm->transmit_lock);
     ^
lcm_mpudpm.c:300:9: warning: 'g_mutex_free' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:275) [-Wdeprecated-declarations]
         g_mutex_free(lcm->create_read_thread_mutex);
         ^
lcm_mpudpm.c:301:9: warning: 'g_cond_free' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:279) [-Wdeprecated-declarations]
         g_cond_free(lcm->create_read_thread_cond);
         ^
lcm_mpudpm.c: In function 'recv_message_fragment':
lcm_mpudpm.c:507:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_lock(&lcm->receive_lock);
         ^
lcm_mpudpm.c:509:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock(&lcm->receive_lock);
         ^
lcm_mpudpm.c: In function 'dispatch_complete_message':
lcm_mpudpm.c:573:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_lock(&lcm->transmit_lock);
         ^
lcm_mpudpm.c:575:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock(&lcm->transmit_lock);
         ^
lcm_mpudpm.c:597:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_lock(&lcm->receive_lock);
         ^
lcm_mpudpm.c:600:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock(&lcm->receive_lock);
         ^
lcm_mpudpm.c:603:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_lock(&lcm->receive_lock);
         ^
lcm_mpudpm.c:623:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock(&lcm->receive_lock);
         ^
lcm_mpudpm.c: In function 'recv_thread':
lcm_mpudpm.c:645:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_lock(&lcm->receive_lock);
         ^
lcm_mpudpm.c:665:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock(&lcm->receive_lock);
         ^
lcm_mpudpm.c:701:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_lock(&lcm->receive_lock);
         ^
lcm_mpudpm.c:705:13: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
             g_static_mutex_unlock(&lcm->receive_lock);
             ^
lcm_mpudpm.c:735:17: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
                 g_static_mutex_unlock(&lcm->receive_lock);
                 ^
lcm_mpudpm.c:827:17: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
                 g_static_mutex_lock(&lcm->receive_lock);
                 ^
lcm_mpudpm.c:833:13: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
             g_static_mutex_lock(&lcm->receive_lock);
             ^
lcm_mpudpm.c:840:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock(&lcm->receive_lock);
         ^
lcm_mpudpm.c: In function 'lcm_mpudpm_subscribe':
lcm_mpudpm.c:889:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_lock(&lcm->transmit_lock);
         ^
lcm_mpudpm.c:892:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock(&lcm->transmit_lock);
         ^
lcm_mpudpm.c:896:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_lock(&lcm->transmit_lock);
         ^
lcm_mpudpm.c:913:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock(&lcm->transmit_lock);
         ^
lcm_mpudpm.c:915:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_lock(&lcm->receive_lock);
         ^
lcm_mpudpm.c:917:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock(&lcm->receive_lock);
         ^
lcm_mpudpm.c:921:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_lock(&lcm->receive_lock);
     ^
lcm_mpudpm.c:923:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_unlock(&lcm->receive_lock);
     ^
lcm_mpudpm.c: In function 'lcm_mpudpm_unsubscribe':
lcm_mpudpm.c:934:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_lock(&lcm->receive_lock);
     ^
lcm_mpudpm.c:949:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock(&lcm->receive_lock);
         ^
lcm_mpudpm.c:968:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_unlock(&lcm->receive_lock);
     ^
lcm_mpudpm.c: In function 'channel_port_mapping_update_handler':
lcm_mpudpm.c:1034:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_lock(&lcm->transmit_lock);
     ^
lcm_mpudpm.c:1062:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_unlock(&lcm->transmit_lock);
     ^
lcm_mpudpm.c: In function 'update_subscription_ports':
lcm_mpudpm.c:1103:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_lock(&lcm->receive_lock);
     ^
lcm_mpudpm.c:1104:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_lock (&lcm->transmit_lock);
     ^
lcm_mpudpm.c:1136:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_unlock (&lcm->transmit_lock);
     ^
lcm_mpudpm.c:1137:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_unlock(&lcm->receive_lock);
     ^
lcm_mpudpm.c: In function 'publish_message_internal':
lcm_mpudpm.c:1160:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock(&lcm->transmit_lock);
         ^
lcm_mpudpm.c:1162:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_lock(&lcm->transmit_lock);
         ^
lcm_mpudpm.c: In function 'lcm_mpudpm_publish':
lcm_mpudpm.c:1313:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_lock(&lcm->transmit_lock);
     ^
lcm_mpudpm.c:1315:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_unlock(&lcm->transmit_lock);
     ^
lcm_mpudpm.c: In function 'lcm_mpudpm_handle':
lcm_mpudpm.c:1341:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_lock (&lcm->receive_lock);
     ^
lcm_mpudpm.c:1347:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock (&lcm->receive_lock);
         ^
lcm_mpudpm.c:1356:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_unlock (&lcm->receive_lock);
     ^
lcm_mpudpm.c:1373:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_lock (&lcm->receive_lock);
     ^
lcm_mpudpm.c:1376:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_unlock (&lcm->receive_lock);
     ^
lcm_mpudpm.c: In function 'mpudpm_self_test':
lcm_mpudpm.c:1399:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_lock(&lcm->transmit_lock);
     ^
lcm_mpudpm.c:1402:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_unlock(&lcm->transmit_lock);
     ^
lcm_mpudpm.c:1427:13: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
             g_static_mutex_lock(&lcm->transmit_lock);
             ^
lcm_mpudpm.c:1430:13: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
             g_static_mutex_unlock(&lcm->transmit_lock);
             ^
lcm_mpudpm.c: In function 'setup_recv_parts':
lcm_mpudpm.c:1588:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_lock(&lcm->receive_lock);
     ^
lcm_mpudpm.c:1596:9: warning: 'g_static_private_get' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:247): Use 'g_private_get' instead [-Wdeprecated-declarations]
         if(g_static_private_get(&CREATE_READ_THREAD_PKEY)) {
         ^
lcm_mpudpm.c:1597:13: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
             g_static_mutex_unlock(&lcm->receive_lock);
             ^
lcm_mpudpm.c:1603:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock(&lcm->receive_lock);
         ^
lcm_mpudpm.c:1611:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_lock(&lcm->receive_lock);
         ^
lcm_mpudpm.c:1616:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock(&lcm->receive_lock);
         ^
lcm_mpudpm.c:1619:9: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
         g_static_mutex_unlock(&lcm->receive_lock);
         ^
lcm_mpudpm.c:1625:5: warning: 'g_mutex_new' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:273) [-Wdeprecated-declarations]
     lcm->create_read_thread_mutex = g_mutex_new();
     ^
lcm_mpudpm.c:1626:5: warning: 'g_cond_new' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:277) [-Wdeprecated-declarations]
     lcm->create_read_thread_cond = g_cond_new();
     ^
lcm_mpudpm.c:1629:5: warning: 'g_static_private_set' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:250): Use 'g_private_set' instead [-Wdeprecated-declarations]
     g_static_private_set(&CREATE_READ_THREAD_PKEY, GINT_TO_POINTER(1), NULL);
     ^
lcm_mpudpm.c:1656:5: warning: 'g_thread_create' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:100): Use 'g_thread_new' instead [-Wdeprecated-declarations]
     lcm->read_thread = g_thread_create (recv_thread, lcm, TRUE, NULL);
     ^
lcm_mpudpm.c:1678:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_unlock(&lcm->receive_lock);
     ^
lcm_mpudpm.c:1683:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_lock(&lcm->receive_lock);
     ^
lcm_mpudpm.c:1699:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_unlock(&lcm->receive_lock);
     ^
lcm_mpudpm.c:1702:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_lock(&lcm->transmit_lock);
     ^
lcm_mpudpm.c:1704:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_unlock(&lcm->transmit_lock);
     ^
lcm_mpudpm.c:1711:5: warning: 'g_static_mutex_get_mutex_impl' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:150): Use 'GMutex' instead [-Wdeprecated-declarations]
     g_static_mutex_unlock(&lcm->receive_lock);
     ^
lcm_mpudpm.c: In function 'lcm_mpudpm_create':
lcm_mpudpm.c:1755:5: warning: 'g_static_mutex_init' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:146): Use 'g_mutex_init' instead [-Wdeprecated-declarations]
     g_static_mutex_init (&lcm->receive_lock);
     ^
lcm_mpudpm.c:1756:5: warning: 'g_static_mutex_init' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:146): Use 'g_mutex_init' instead [-Wdeprecated-declarations]
     g_static_mutex_init (&lcm->transmit_lock);
     ^
  CC       lcm_tcpq.lo
  CC       ringbuffer.lo
  CC       udpm_util.lo
  CC       eventlog.lo
  CC       lcmtypes/channel_to_port_t.lo
  CC       lcmtypes/channel_port_map_update_t.lo
  CCLD     liblcm.la
make: Leaving directory `/home/admin/lcm/lcm'
admin@arm:~/lcm$

Ubuntu / Debian build missing some 'Required Packages'

In order to install V1.3.1 LCM on an Ubuntu distribution I performed the following:

sudo apt-get install build-essential libglib2.0-dev python-dev

git clone https://github.com/lcm-proj/lcm.git
git checkout -b v1.3.1
cd lcm/
./bootstrap.sh
./configure
make
sudo make install

This failed at './bootstrap.sh' because it was complaining about autoconf. I don't have much experience with these tools but after I installed 'autoconf' and 'libtool' the entire build worked.

So replacing
apt-get install build-essential libglib2.0-dev python-dev

With
apt-get install build-essential libglib2.0-dev python-dev autoconf libtool

Seemed to fix the issue

Obsolete dependency on gthread-2.0

In lcm.c there is if (!g_thread_supported ()) g_thread_init (NULL); Since g_thread_supported is defined to 1, function g_thread_init is never called and removed by the optimizing compiler. It anyway would do nothing, since in gthread-impl.c it is:

void g_thread_init (gpointer init) {
  if (init != NULL)
    g_warning ("GThread system no longer supports custom thread implementations.");
}

Therefore the dependency on gthread-2.0 can be removed.

lcmlite channel parsing issue

So I'm using lcmlite and the deliver_packet method in lcmlite.c (line 64) appears to parse the channel name by skipping every other letter. (there are two pos++ in the loop).
I'm not sure if this is for efficiency or a bug, but when i get received message, the channel match fails because it skips past the last character, doesn't match, and fails to receive it.

Either way, I'm just wondering if this is a bug or if I'm using the implementation wrong.
Using lcm-1.2.1.
Thanks

Wrong check for valid address

Hey,
I've been using (and liking) your code but I think there is a little mistake in:
file lcm/lcm_udpm.c
line 195
"if (inet_aton (words[0], (struct in_addr*) &params->mc_addr) < 0) {"

From the man page as well as from personal tests it seems that inet_aton returns 0 for a fail and 1 for a success (man says "non-zero", my tests show 1). So the check is actually never performed and the error message never issued.

Please let me know if you disagree, or how I can help to fix it.

Regards,
C

Realtime LCM

Hi all,
I'm currently working to implement IPC between Real time (with Xenomai) and Non-Real time threads in C++ for my robot.

When called from within the real time thread, all the LCM calls (especially publish) are breaking the real time.

Have you ever implemented real-time safe LCM calls? Something like this for ROS.

On my side I've already tried few things such as:
From RT to non-RT, I tried to convert the messages into binary blobs, send them trough a Xenomai pipe, get the blob on the non-RT side and publish it to LCM, but even the encode function is breaking the realtime.
An idea of what I tried is as follows:

    void* buf = malloc(joint_state_msg_.getEncodedSize());
    joint_state_msg_.encode(buf, 0, joint_state_msg_.getEncodedSize());
    int ret = sendto(joint_state_socket, buf, joint_state_msg_.getEncodedSize(), 0, NULL, 0);
    free(buf);

From non-RT to RT, I tried to run a non-RT thread with associated LCM callback that writes on the Xenomai pipe, as follows:

// get message from LCM and pass it to RT servo through Xenomai pipe
    void* buf = malloc(msg->getEncodedSize());
    msg->encode(buf, 0, msg->getEncodedSize());
    int ret = write(pronto_fd, buf, msg->getEncodedSize());
    if(ret < 0) {
        std::cerr << "ERROR: write on Xenomai pipe failed" << std::endl;
    }
    free(buf);

An example of how a Xenomai pipe works is here.

Notice that Xenomai pipes are nothing more than file descriptors and sockets.

I will try to provide a minimal compilable example in the next few days, if you are interested in the issue.

LCM gets many warnings in 64 bit Windows

We build Drake using LCM, currently v1.2.1. When building in Visual Studio 2015 Win64, we get a large number of warnings, apparently due to LCM mixing int and size_t which are different sizes when compiling 64 bit. While these may be harmless as written, they are correctly identifying a problem, and the large number of warnings makes it hard to see more important problems. It would be great to see this build cleanly on Win64!

Typical warnings look like this:

c:\users\sherm\documents\github\robotlocomotion\drake-build\install\include\lcm\lcm-cpp-impl.hpp(134): 
warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data [C:\Users\Sherm\Documents\GitHub\RobotLocomotion\drake-build\drake\examples\Cars\carSimLCM.vcxproj]
21>c:\users\sherm\documents\github\robotlocomotion\drake-build\install\include\lcm\lcm-cpp-impl.hpp(353): 
warning C4267: '=': conversion from 'size_t' to 'int32_t', possible loss of data [C:\Users\Sherm\Documents\GitHub\RobotLocomotion\drake-build\drake\examples\Cars\carSimLCM.vcxproj]
21>C:\Users\Sherm\Documents\GitHub\RobotLocomotion\drake-build\install\include\lcm/lcm_coretypes.h(397): 
warning C4267: '+=': conversion from 'size_t' to 'int', possible loss of data [C:\Users\Sherm\Documents\GitHub\RobotLocomotion\drake-build\drake\examples\Cars\carSimLCM.vcxproj]
21>C:\Users\Sherm\Documents\GitHub\RobotLocomotion\drake-build\install\include\lcm/lcm_coretypes.h(413): 
warning C4267: 'initializing': conversion from 'size_t' to 'int32_t', possible loss of data [C:\Users\Sherm\Documents\GitHub\RobotLocomotion\drake-build\drake\examples\Cars\carSimLCM.vcxproj]
21>C:\Users\Sherm\Documents\GitHub\RobotLocomotion\drake-build\drake\lcmgen\lcmtypes/drake/lcmt_drake_signal.hpp(180): 
warning C4267: '+=': conversion from 'size_t' to 'int', possible loss of data [C:\Users\Sherm\Documents\GitHub\RobotLocomotion\drake-build\drake\examples\Cars\carSimLCM.vcxproj]
21>C:\Users\Sherm\Documents\GitHub\RobotLocomotion\drake-build\drake\lcmgen\lcmtypes\drake\lcmt_viewer_geometry_data.hpp(227): 
warning C4267: '+=': conversion from 'size_t' to 'int', possible loss of data [C:\Users\Sherm\Documents\GitHub\RobotLocomotion\drake-build\drake\examples\Cars\carSimLCM.vcxproj]
21>C:\Users\Sherm\Documents\GitHub\RobotLocomotion\drake-build\drake\lcmgen\lcmtypes\drake\lcmt_viewer_link_data.hpp(173): 
warning C4267: '+=': conversion from 'size_t' to 'int', possible loss of data [C:\Users\Sherm\Documents\GitHub\RobotLocomotion\drake-build\drake\examples\Cars\carSimLCM.vcxproj]
21>C:\Users\Sherm\Documents\GitHub\RobotLocomotion\drake-build\drake\lcmgen\lcmtypes/drake/lcmt_viewer_draw.hpp(212): 
warning C4267: '+=': conversion from 'size_t' to 'int', possible loss of data [C:\Users\Sherm\Documents\GitHub\RobotLocomotion\drake-build\drake\examples\Cars\carSimLCM.vcxproj]

LCM self test failed.

Running on on Mac OS X Yosemite. The firewall is off under System Preferences/Security & Privacy
Is there a network configuration step that is needed?

./listener
LCM self test failed!!
Check your routing tables and firewall settings
LCM self test failed!!
Check your routing tables and firewall settings

Qt QSocketNotifier not work with LCM

I try to use the file description in Qt. But when I send a message to the upd multicast, the program didn't run the intteruptLcm().

codes:
int lcmFd = lcm.getFileno();
m_notifierLcm = new QSocketNotifier(lcmFd, QSocketNotifier::Read, this);
connect(m_notifierLcm, SIGNAL(activated(int)), this, SLOT(interruptLcm()));

void interruptLcm()
{
qDebug("[OK] received a message!");
}

LCM Java Fails When Host Computer has IPv6 Address

Here is the error:

LC singleton fail: java.net.SocketException: Can't assign requested address

It is caused by the network interface returning an IPv6 IP address. One workaround is to use the -Djava.net.preferIPv4Stack=true flag in the java.opts file or as a JVM command line parameter. However, it would be nice if LCM could be modified to support the situation where the host computer reports an IPv6 address. For example, if outright support of IPv6 is not possible, maybe the exception could be caught and logic be added to try to get the local IPv4 address if it is available?

Related:

Lua rockspec is out of date

The rockspec provides an alternative way to install the LCM Lua binding using LuaRocks. It's currently not working, and otherwise out of date. The LUAROCKS_INSTALL instructions will need to be updated, too.

Emit Lua: Option for byte array as string

Hello,
In a separate fork, I have a commit for an option to use Lua strings to represent an array of bytes, rather than a table of numbers. A command line option of "lbytestring" (via getopt_add_bool) to lcm-gen is used to enable this representation of a byte array (byte[n]).

This is useful in the case of large byte arrays, where a large table of numbers would exceed the available stack space. The new optional Lua code would perform a data:read() with no processing. The relevant commit can be found below (I apologize the for the white space changes polluting the commit).

I believe this would be a useful feature, if not the default setting for emitting Lua code. Thanks for taking a look. Please let me know your thoughts!

StephenMcGill-TRI@a74b424

Sincerely,
Steve McGill

install for native python in mac

Hi,
I got the lcm files and did both make install and python install in the lcm-python folder.
Both run smoothly.

The issue is that by default I am using the native python in my Mac and LCM seems to have been installed for a different version of python within my computer.

How can I install LCM for the default python?
Thank you for your help,

Javier

Details.

$ which python
/usr/local/bin/python
$ python

can not find module lcm if i try to import it

$ cd /usr/local/lib/python2.7/site-packages/
$ python

successful import lcm

lcm-gen generates invalid Python for messages without a package

From Carlos Galvez message to lcm-users

Hi,

I have created some .lcm files that have no "package _______;" inside them. The generated C and C++ encoders/decoders work just fine in my application.
Now I want to generate Python code as well using the same .lcm files. I am pretty much a Python beginner. However I have realized that:

  1. The file init.py is not generated.
  2. The code generated for nested structs has syntax errors. For example, having:

struct type1
{
double x;
}

struct type2
{
type1 x;
float y;
}

The generated code for type2.py has the following syntax error in _get_hash_recursive():

    tmphash = (0x9d6e135c72517403+ .type1._get_hash_recursive(newparents)) & 0xffffffffffffffff
                                                                                ^

If I write "package exlcm;", I then get a correct syntax:

    tmphash = (0x9d6e135c72517403+ exlcm.type1._get_hash_recursive(newparents)) & 0xffffffffffffffff

In addition, I don't understand why sometimes methods from type1 are called without using the module name. For example in _decode_one, it's used:
self.x = type1._decode_one(buf)
instead of
self.x = exlcm.type1._decode_one(buf)

Could you clarify why this is possible?
Is there a way to make the Python code work without using a package? Will this be fixed in future releases?
Thanks!

lcm-logplayer-gui regression

Running lcm-logplayer-gui, I now get the following error:

$ lcm-logplayer-gui lcm.log
/usr/local/bin/lcm-logplayer-gui: 3: /usr/local/bin/lcm-logplayer-gui: Bad substitution
Unable to find 'lcm.jar'; please check your installation

@mwoehlke-kitware it looks like you added some bash-isms to lcm-logplayer-gui and left it at #!/bin/sh?

Custom error handler / debugging

The current error handling is done by printing to stderr or calling perror function, which also prints to the console window. For GUI applications where no console is available these error messages are simply hidden and make debugging really a pain. Therefore, it would be nice if a custom error handler could be added, such that error or debug messages can be caught and application-dependent dealt with. The default error handler would just be the current behavior for backwards-compatibility.

Error on installation using .zip file

Everything works up to sudo make install where I get this error (using version 1.2.0):

make[1]: Leaving directory `/home/abarry/downloads/lcm-1.2.0/lcm-java'
Making install in lcm-python
make[1]: Entering directory `/home/abarry/downloads/lcm-1.2.0/lcm-python'
make[2]: Entering directory `/home/abarry/downloads/lcm-1.2.0/lcm-python'
 /bin/mkdir -p '/usr/local/lib/python2.7/dist-packages/lcm'
 /bin/bash ../libtool   --mode=install /usr/bin/install -c   _lcm.la '/usr/local/lib/python2.7/dist-packages/lcm'
libtool: install: warning: relinking `_lcm.la'
libtool: install: (cd /home/albert/proj/lcm/lcm-1.2.0/lcm-python; /bin/bash /home/albert/proj/lcm/lcm-1.2.0/libtool  --silent --tag CC --mode=relink gcc -I.. -g -O2 -module -avoid-version -o _lcm.la -rpath /usr/local/lib/python2.7/dist-packages/lcm _lcm_la-module.lo _lcm_la-pyeventlog.lo _lcm_la-pylcm.lo _lcm_la-pylcm_subscription.lo ../lcm/liblcm.la )
../libtool: line 1085: cd: /home/albert/proj/lcm/lcm-1.2.0/lcm-python: No such file or directory
/bin/bash: /home/albert/proj/lcm/lcm-1.2.0/libtool: No such file or directory
libtool: install: error: relink `_lcm.la' with the above command before installing it
make[2]: *** [install-pylcmexecLTLIBRARIES] Error 1
make[2]: Leaving directory `/home/abarry/downloads/lcm-1.2.0/lcm-python'
make[1]: *** [install-am] Error 2
make[1]: Leaving directory `/home/abarry/downloads/lcm-1.2.0/lcm-python'
make: *** [install-recursive] Error 1

Looks like something with a hardcoded path (/home/albert/...) got stuck in there by mistake.

When I download the .tar.gz file and run bootstrap.sh myself, everything installs correctly.

Autoconf fails if glib is not available

autoconf 2.69 fails on Ubuntu 14.04 if glib is not available.

admin@arm:~/lcm$ ./bootstrap.sh
running "autoreconf -i"...
libtoolize: putting auxiliary files in `.'.
libtoolize: copying file `./ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: copying file `m4/libtool.m4'
libtoolize: copying file `m4/ltoptions.m4'
libtoolize: copying file `m4/ltsugar.m4'
libtoolize: copying file `m4/ltversion.m4'
libtoolize: copying file `m4/lt~obsolete.m4'
configure.ac:9: error: possibly undefined macro: AC_MSG_ERROR
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
autoreconf: /usr/bin/autoconf failed with exit status: 1

Once glib is installed by sudo apt-get install libglib2.0-dev autoconf succeeds.

lcm::LCM::handleTimeout()

Function working in a weird manner. The LCM C++ API says that the function returns >0 when a message is handled successfully.

I assume that it returns an integer only after giving a call to the subscribed callback function. In my case, the handleTimeout function returning 1 without even giving a call to the callback function. Can anyone explain this behaviour?

are empty vectors required required for 2D arrays in C++?

Consider this message type:
struct pointcloud_t
{
int32_t n_points;
float points [n_points][3];

int32_t n_channels;
float channels [n_points][n_channels];
}

And this c++ publishing code ... where no channel data is being filled in:
pointcloud_t out;
for (size_t i = 0; i < 100; i++) {
std::vector point = { 0.0, 1.0, 2.0};
out.points.push_back(point);
std::vector channels = {};
out.channels.push_back(channels);
}
out.n_points = out.points.size();
out.n_channels = 0;
lcm_pub_->publish("CHANNEL",&out);

Without these two lines calling publish() causes a seg fault
std::vector channels = {};
out.channels.push_back(channels);

Is this intended? or the publish function anyway?

Can't write a logfile programmatically

I can't create a valid lcmlogfile programmatically. The way I'm doing this is something like the following:

while(eventnum < 2500) {
        std::cout << "Eventnum: " << eventnum << std::endl;
        struct timeval tv;
        gettimeofday(&tv, NULL);

        test_msg.utime = utime_now();

        double f1 = 1; // 1 Hz
        double f2 = 2; // 2 Hz
        double f3 = 3; // 3 Hz

        test_msg.joint_position[0] = sin(2 * M_PI * f1 * (double)test_msg.utime / 1000000.0); // we want seconds inside
        test_msg.joint_velocity[0] = sin(2 * M_PI * f2 * (double)test_msg.utime / 1000000.0); // we want seconds inside
        test_msg.joint_effort[0] = sin(2 * M_PI * f3 * (double)test_msg.utime / 1000000.0); // we want seconds inside

        lcm::LogEvent le;
        le.channel = "JOINT_TEST";
        le.datalen = sizeof(test_msg);
        le.eventnum = eventnum;
        le.timestamp = test_msg.utime;
        le.data = (void*)&test_msg;

        lf->writeEvent(&le);

        mylcm.publish(le.channel, &test_msg);

        eventnum++;
        usleep(1000);
    }

Previously lf is filled this way:

    lf = new lcm::LogFile("/path/to/file.lcmlog", "w");

where lf is lcm::LogFile* lf;
Basically I fill in the message, then I create a LogEvent, I fill in its values and update the event num.

What I see from lcm-logplayer-gui and lcm-spy is a logfile with correct lengths and channels but the content of the messages always stays the same (not sure whether the value is the very last one or a random one).

lcm_create with tcpq:// fails with error

Hi

I want to use lcm with tcpq. So I changed the lcm_create() in example/c/listener.c with the argument "tcpq://"

I am seeing the following error when listener is run.

LCM tcpq: connecting...
lcm_tcpq connect: Connection refused
LCM tcpq: Unable to connect to server
LCM tcpq: connecting...
lcm_tcpq connect: Connection refused
LCM tcpq: Unable to connect to server

Please tell me how to get it up.

Add Post Install Information

I'm not sure if others have had similar issues, but in order to link LCM I had to add the file /etc/ld.so.conf.d/lcm.conf containing /usr/local/lib, which is the default LCM install directory.

I had to add the following environment variables

PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
LUA_CPATH=/usr/local/lib/lua/5.3/?.so

For python I added the file lcm.pth containing /usr/local/lib/python3.5/site-packages/ at the location returned by

python -m site --user-site

Some of these things could be done automatically by make install, but I'm not familiar enough with automake to know how easy that is. At the very least we should add it to the documentation somewhere.

const double declarations in C++

  • With a declaration const double steering = 12.6;, I'm getting an in-class declaration like this static const double steering = 12.6;, which gives me compilation errors like the below:
error: ‘constexpr’ needed for in-class initialization of static data member

Is this a known issue? If yes, could I know how to deal with this.
[EDIT] Something that either prevents a 'static' declaration or allows 'constexpr' should work.

  • Is there any support for const arrays like so: const double[5] = {1.0,3.0,2.0,4.0,3.0}

lcm socket should probably be close-on-exec

While hunting down some unclean exit issues, I noticed that the lcm filehandle was leaking into child processes (first noticed with procman but we have a bunch of other directly forking code too.) Although fileno is exposed so I could fix it at the application level, these days it's considered better practice to set them close-on-exec unless you really intend for them to stay open (examples: https://www.python.org/dev/peps/pep-0433/ https://www.securecoding.cert.org/confluence/display/c/FIO22-C.+Close+files+before+spawning+processes ).

lcm::LCM::handle / handleTimeout()

There seems to be problem with the max amount of data that can be received / published via LCM.

For example, I am trying to publish a 2D array,

(in LCM file)
struct
{
double data[X][1160];
}

Here X is a constant numerical value. In my case, X is 5000. Now the function publishing data has no problem. But the program receiving this data, gives seg fault error if X > 900. (I haven't searched the specific value of X at which seg-fault occurs. For example, trying 1000 will give seg-fault. But at least for X<=900 there is no such problem).

Is there any max bytes limit that the lcm::handle() / handleTimeout() functions handle?

Missing header unistd.h in lcm_logger.c

  CC     lcm_logger.o
lcm_logger.c: In function ‘write_thread’:
lcm_logger.c:261:13: warning: implicit declaration of function ‘fdatasync’ [-Wimplicit-function-declaration]
             fdatasync(fileno(logger->log->f));
             ^

java.lang.NoClassDefFoundError

Sorry, can I revisit issue #19 ? I get a very similar error on lcm 1.2.1. lcm-spy can find the LCM types I defined in my jar, but lcm-spy only shows a grey window.

Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release
ClassDiscoverer: java.lang.NoClassDefFoundError:apple/laf/AquaPopupMenuUI
jar: /usr/local/share/java/lcm.jar
class: com/jidesoft/plaf/aqua/AquaJidePopupMenuUI.class
ClassDiscoverer: java.lang.NoClassDefFoundError: org/apache/commons/io/output/ByteArrayOutputStream
jar: /usr/local/share/java/lcm.jar
class: org/apache/xmlgraphics/xmp/XMPPacketParser.class
ClassDiscoverer: java.lang.NoClassDefFoundError: org/apache/commons/io/output/ByteArrayOutputStream
jar: /usr/local/share/java/lcm.jar
class: org/apache/xmlgraphics/image/loader/impl/ImageConverterRendered2PNG.class
Found 15 LCM types
LCM: Disabling IPV6 support
LCM: TTL set to zero, traffic will not leave localhost.
ClassDiscoverer: java.lang.NoClassDefFoundError: apple/laf/AquaPopupMenuUI
jar: /usr/local/share/java/lcm.jar
class: com/jidesoft/plaf/aqua/AquaJidePopupMenuUI.class
Found 0 plugins

callback called on wrong channel

Hi all,
apparently LCM and Xenomai are not so keen to work together...

Latest issue is related to callback functions that are actually called on the wrong channel.

Now, what I'm doing is running several std::thread from within a realtime thread.

Each one of these threads are creating their local copy of the LCM object and subscribing to a topic and assigning a callback to it.

Here's an example of thread body:

void ProntoWrapper::pronto_thread_body_xeno() {
    lcm::LCM mylcm;
    if(mylcm.good()) {
        pronto_sub = mylcm.subscribe(pronto_channel, &ProntoWrapper::pronto_cb_xeno, this);
    }

    // At this point, we assume no one will subscribe again to mylcm
    // therefore we do not lock the lcm object.
    while(mylcm.good()) {
        mylcm.handle(); // invoking the callback LCM
    }
    if(pronto_sub != NULL) {
        mylcm.unsubscribe(pronto_sub);
    }
}

the callback function pronto_callback_xeno belongs to the class ProntoWrapper.

What I noticed is that when running the procman-sheriff I was getting a periodic error of type "failed to decode pose_t".

I realized it was the periodic polling message from the sheriff, which is sent to a different channel and has of course a different type definition.

The workaround I adopted was to make the callback not automatically decoding and putting a control at the beginning, as follows:

void ProntoWrapper::pronto_cb_xeno(const lcm::ReceiveBuffer *rbuf,
                                  const std::string &chan) {
    if(chan.compare(pronto_channel) != 0) {
        // Silently quit if it is not the channel we are looking for
        return;
    }
// decode and use the message here
}

Did it ever happened to you? Any clue about the cause?

This was tested on Ubuntu 14.04 with Xenomai patch 2.6.4

Win32 x64 Install Issues

I can't seem to install LCM v1.3.1 on Windows with msvc-12.

I followed the advice in the WinSpecific folder for GLIB, i.e. I've installed msys2 and mingw. In the msys shell I installed the mingw-w64-x86_64-gcc package along with autoconf, automake, and other utilities (git, vim, etc)

Am I suppose to build LCM in the msvc environment? If I do, I can't seem to link. At first because at first it was missing ws2_32, but even after that it's missing a bunch of it's own symbols it seems like lcm_internal_pipe_write. Even just to get to that point, in lcm/windows/WinPorting.h:10 I have to comment out lines 10 and 11 to avoid conflicts.

I noticed there are CMake files here that have a lot of if (WIN32), but when running cmake from cmd, I can't get them to find my glib-2.0 libs no matter what I set GLIB_PATH to.

I'm going to go back to trying to build glibc without mingw to see if that helps.. But overall I've now lost two full work days trying to build LCM on Windows (whereas on Linux it took me under a minute I think from cloning to having it built.)

Generated C++ Message Code Can Potentially Have Variable Shadow Problems

Problem Definition

In RobotLocomotion/drake#3352 we ran into a problem where the name of a message's field collided with the name of a local variable in the generated C++ message code. Since we enabled the -Werror=shadow compiler flag, this resulted in an error.

How receptive would the LCM community be to the following potential solutions? Are there other potential solutions that should be considered?

Potential Solutions

Option 1 - Modify C++ Code Generator to Emit .h and .cc Files

This would be nice in terms of hiding implementation details in .cc files, but is a major project to undertake.

Option 2 - Postfix the Names of All Local Variables

We could modify the C++ code generator to add a "_lcm" suffix to all local variables. Then we can update the documentation to say "thou shall not declare a LCM message field name that ends in "_lcm". This requirement could also be enforced by the code generator.

Feature request: Report number of messages in LCM queue in python

Our group has added the following feature to LCM python. It is desirable for us to know the number of messages remaining in the LCM queue so we can process the entire LCM buffer while avoiding the potential race condition you might get from "while True: lcm.handle()"

We have added the following code to pylcm.c, the function name is probably not the best, but I think this could improve life for users of python wrapper for LCM.

static PyObject *
pylcm_get_num_msgs_in_queue (PyLCMObject *lcm_obj)
{
return Py_BuildValue ("I", lcm_get_num_messages_in_queue (lcm_obj->lcm));
}
PyDoc_STRVAR (pylcm_num_msgs_doc,
"get_num_msgs_in_queue() -> int\n
\n
Returns the number of messages in the queue.\n
");

Then add the following line to the pylcm_methods array:
{ "get_num_msgs_in_queue", (PyCFunction)pylcm_get_num_msgs_in_queue, METH_NOARGS, pylcm_num_msgs_doc },

Sporadic build failures in lcm-java

I'm getting occasional build failures of lcm-1.3.0 in lcm-java, with error messages like the following:

cd build && /usr/bin/jar xf .././jchart2d-code/ext/xmlgraphics-commons-1.3.1.jar
java.io.IOException: META-INF : could not create directory
    at sun.tools.jar.Main.extractFile(Main.java:993)
    at sun.tools.jar.Main.extract(Main.java:924)
    at sun.tools.jar.Main.run(Main.java:264)
    at sun.tools.jar.Main.main(Main.java:1231)
make[1]: *** [build/com/jidesoft/comparator/AlphanumComparator.class] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory `/home/travis/.julia/v0.4/LCMGL/deps/src/lcm-1.3.0/lcm-java'
make: *** [all-recursive] Error 1
make: Leaving directory `/home/travis/.julia/v0.4/LCMGL/deps/src/lcm-1.3.0'

For example, here's a Travis log in which the build fails: https://travis-ci.org/rdeits/LCMGL.jl/jobs/117841931

It's happening with probability on my Travis-CI servers, so it appears to be some non-determinism or race condition inside the LCM build, even though I'm performing a serial build.

We've observed this before with Drake: https://github.com/RobotLocomotion/lcm-pod/issues/7 but have since switched to our own cmake-based build for LCM for that project. There's some discussion of the possible causes over at that issue.

Requesting a new release

I'm trying to integrate LCM into a new build process (specifically, Julia's BinDeps package), but because it performs builds out-of-source, I can't build the LCM 1.3.0 release. Would you be willing to publish a new release that contains at least the fixes from #41 ? I can probably roll my own, but having an official release here would make life much easier.

Publish a compiled lcm.jar on release

As we're starting to use LCM more, we're finding that it would be really helpful to have lcm.jar published to one of the maven repositories (maven central, bintray) when new LCM releases get tagged.

Optionally, even if you were to release a versioned/named .jar as part of the github release process, we could easily automate retrieval of that file using gradle.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.